无法在Linux中使用fcntl切换到阻止模式

霍夫坦

我有一个示例程序:

int main()
{
   const char* fn = "/tmp/tmpfifo";
   int i = mkfifo(fn, 0666);
   int fd = open(fn, O_RDONLY | O_NONBLOCK);
   int flags = fcntl(fd, F_GETFL);
   flags &= ~O_NONBLOCK;
   fcntl(fd, F_SETFL, flags);

   char buf[1024];
   int rd= read(fd, buf, 100);
   cout << rd << endl;
   remove(fn);
   return 0;
}

似乎从文件描述符中删除了非阻塞标志之后,该read调用应阻塞,直到将某些内容写入FIFO中为止,但是我的程序始终在没有阻塞和rd=0结果的情况下运行您能解释一下这种行为吗?谢谢!

mtk

您所看到的行为是预期的。您已完成以下操作:

  1. 使用打开了FIFO的读取端O_NONBLOCK,因此不需要在FIFO上存在写入器。这样可以保证open()会立即成功。
  2. O_NONBLOCK在后续读取之前禁用现在,您已回到相当于FIFO具有读取器和写入器,但写入器关闭FIFO的标准(阻塞)情况的位置。那时,读者应该看到文件结尾,这就是您所看到的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用NDIS切换到监视模式?

来自分类Dev

无法通过Linux桥接器从VM切换到VM

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

sbt无法切换到使用ProjectRef从github导入的项目

来自分类Dev

无法使用su切换到特定的系统帐户

来自分类Dev

在64位linux上从32位模式切换到64位(长模式)

来自分类Dev

React不会切换到生产模式

来自分类Dev

Notepad ++切换到奇怪的编辑模式

来自分类Dev

在Firemonkey中切换到发布模式

来自分类Dev

Chrome突然切换到“夜间模式”

来自分类Dev

如何切换到桌面模式

来自分类Dev

SELinux不会切换到“强制”模式

来自分类Dev

从 Linux Mint 切换到 Arch Linux

来自分类Dev

使用esp32从Wifi接入点模式切换到站点模式

来自分类Dev

Elasticdump中的“现在无法立即切换到旧模式”错误

来自分类Dev

用户切换到黑暗模式时,无法获取UINavigationBar tintColor进行更新

来自分类Dev

安装CUDA后无法在16.04的Nvidia X Server上切换到性能模式

来自分类Dev

如何在Linux Fedora中禁用自动切换到睡眠模式?

来自分类Dev

在Kali Linux中切换到监视模式后是否打算断开WiFi连接?

来自分类Dev

Swift:无法从UIViewController切换到UITableViewController

来自分类Dev

硒无法切换到iframe

来自分类Dev

无法切换到问候语

来自分类Dev

Windows 7无法切换到全屏

来自分类Dev

无法切换到TTY或返回

来自分类Dev

我想切换到Linux

来自分类Dev

阻止Opera切换到新标签页

来自分类Dev

如何阻止localhost http:// localhost切换到https:// localhost

来自分类Dev

使用按钮将网站切换到永久性全屏模式

Related 相关文章

热门标签

归档