gpt4 book ai didi

c - 在单个进程中使用命名管道

转载 作者:行者123 更新时间:2023-12-04 11:28:05 24 4
gpt4 key购买 nike

我正在尝试使用命名管道在进程内进行通信。
这是代码

#include <stdio.h>
#include <fcntl.h>
#include <signal.h>

void sigint(int num)
{
int fd = open("np", O_WRONLY);
write(fd, "y", 1);
close(fd);
}

main()
{
char ch[1];
int fd;

mkfifo("np", 0666);

signal(SIGINT, sigint);

fd = open("np", O_RDONLY);

read(fd, ch, 1);

close(fd);

printf("%c\n", ch[0]);
return;
}

我想要的是 main 阻塞,直到有东西写入管道。
问题是信号处理程序 sigint() 在打开管道后也会阻塞。鉴于管道已经在 main() 中打开以供读取,这是否应该发生?

最佳答案

您在 open() 中阻塞,打开一个用于读取块的fifo,直到有人打开它进行写入。

并打开一个用于写入块的fifo,直到有人打开它进行读取。

信号处理程序与您的 main() 在同一线程中运行,因此您会遇到死锁。两者都无法打开fifo。

您可以通过在 strace 下运行您的程序来检查发生了什么。 .

关于c - 在单个进程中使用命名管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251710/

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