gpt4 book ai didi

c - 使用 mkfifo 阻塞读取直到写入

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:39 25 4
gpt4 key购买 nike

gcc (GCC) 4.7.2
c89

我正在使用管道 mkfifo。我有一个读者和一个作家。

我希望读者阻塞,直到文件中有内容。

有一个标志可以设置为非阻塞模式的 O_NONBLOCK。所以默认情况下它应该在读取时阻塞。

写入文件

int main(void)
{
int fd;
const char *pipe_file = "../../pipe_file/file";
const char *pipe_msg = "PIPE Message";

LOG_INFO("Start writer");

/* Create the FIFO named pipe with read/write permissions */
mkfifo(pipe_file, 0666);

/* Write to the pipe */
fd = open(pipe_file, O_WRONLY);
write(fd, pipe_msg, strlen(pipe_msg) + 1);

LOG_INFO("Terminate writer");

return 0;
}

从文件中读取

int main(void)
{
int fd = -1;
const char *pipe_file = "../../pipe_file/file";
#define BUF_SIZE 1024
char rd_buffer[BUF_SIZE];

LOG_INFO("Start reader");

fd = open(pipe_file, O_RDONLY);

do {
memset(rd_buffer, 0, sizeof(rd_buffer));
/* I WANT IT TO BLOCK HERE, UNTIL THE FILE IS WRITTEN AGAIN */
read(fd, rd_buffer, sizeof(rd_buffer));
LOG_INFO("Contents of buffer [ %s ]", rd_buffer);
/* NO NEED TO SLEEP AS THE FILE WILL DELAY WHEN BLOCKING, I THINK */
} while(1);

/* We're done clean up */
close(fd);
unlink(pipe_file);

LOG_INFO("Terminate reader");

return 0;
}

最佳答案

如果 fifo 的另一端在写入模式下未打开,您的 read() 将立即返回。尝试先运行您的 Write 程序并查看。

更多信息请点击here

关于c - 使用 mkfifo 阻塞读取直到写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17698338/

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