gpt4 book ai didi

c - C 语言中的 IFIFO 文件

转载 作者:行者123 更新时间:2023-11-30 15:41:12 26 4
gpt4 key购买 nike

代码:

            if (P2==0)
{
{
mknod("file1", S_IFIFO|0666, 0);
fd=open("file1", O_WRONLY);
write(fd,string2,strlen(string2));
close(fd);
execl("Ex2","Ex2",NULL);
exit(0);
}
}

P2 是 fork 调用。

在 Ex2 文件中我有以下代码:

            fd=open("file1", O_RDONLY);
read(fd, string3, 8);
close(fd);
printf("\n%d, %s", fd, string3);

我需要从Ex1的P2调用Ex2,Ex2将打印file1 FIFO文件的字符串,但是,当我运行第一个代码时,程序在调用Ex2之前一直等待,如果我打开另一个终端并调用file1 with cat,然后Ex1继续,调用Ex2并显示string3。

有什么办法可以避免这种等待吗?

谢谢。

最佳答案

打开管道进行写入将会阻塞,直到有读取器为止。您可以通过将 O_NONBLOCK 选项与 O_WRONLY 一起使用来更改此行为,但这仅意味着当没有读取器时打开会立即返回错误。

您可能可以使用 O_RDWR 打开文件以避免阻塞,但我很确定当您关闭它时管道的内容将被清除。

但是你的例子并不是管道通常的使用方式。管道并不是某种将数据传递给执行程序的临时存储器;而是用于将数据传递给执行程序的临时存储器。您使用它进行进程间通信。例如,父进程写入数据,子进程读取数据。如果您以这种方式使用管道,那么您同时拥有一个读取器和一个写入器,只要写入器不断写入并且读取器不断读取,就不会出现任何阻塞。

关于c - C 语言中的 IFIFO 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com