我正在向管道写入内容,直到用户输入字符串“end”。如果用户输入字符串“end”,我必须执行以下操作:关闭管道并打印消息“写入管道后”。但是即使我输入了“end”字符串,它也不会打印出“写入管道后”的那行。即使没有进程读取管道,我该如何关闭管道并继续进行呢? 这是我的代码。
int main() {
int fd;
char *b, *c;
printf("Enter Str : ");
b = malloc(50);
gets(b);
while(strcmp(b,"end")!=0){
if(access("MSG",F_OK) != -1) // check pipe is already available.
{
fd = open("MSG", O_WRONLY);
write(fd, b, strlen(b) );
}
else
{
if( mkfifo("MSG", 0666) != -1) // create pipe if not available.
{
fd = open("MSG", O_WRONLY);
write(fd, b, strlen(b) );
}
}
printf("Enter Str : ");
gets(b);
}
close(fd);
printf("After Written to Pipe");
}
if (access("MSG", F_OK) != 0) { if (mkfifo("MSG", 0666) != 0) ... 报告错误并停止... }
,然后只需要一份open()
和write()
的副本。你应该考虑如果 FIFO 创建失败会发生什么。你应该考虑如果open()
失败会发生什么。你可能需要考虑检查write()
的返回值。除非你成功打开了fd
,否则不要调用close()
(但是关闭应该在循环中与打开一起;你正在泄漏文件描述符)。你确定要在循环中打开 FIFO 吗? - Jonathan Leffler