gpt4 book ai didi

c++ - 程序强制关闭管道一端的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 07:27:11 25 4
gpt4 key购买 nike

我正在尝试使用管道创建一个基本的 2 人聊天程序。如果强制关闭连接到管道另一端的应用程序,下面的代码将进入无限循环。第二个程序与此相同,除了管道的名称。

#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <cstdlib>
#include <pthread.h>
#include <string.h>
#define MAX_BUF 1024
void *th()
{
int fd;
char myfifo[] = "/tmp/myfifo2", buf[MAX_BUF];
fd = open(myfifo, O_RDONLY);
while(buf=="");
while(1)
{
read(fd, buf, MAX_BUF);
printf("Stranger : %s\n", buf);
if(!strcmp(buf,"exit"))
break;
else buf[0]='\0';
}
close(fd);
pthread_exit(NULL);
}
int main()
{
int fd;
char myfifo[] = "/tmp/myfifo", msg[25];
pthread_t thread;
pthread_create(&thread, NULL, th, NULL); //error
mkfifo(myfifo, 0666);
fd = open(myfifo, O_WRONLY);
while(msg!="exit")
{
printf("You : ");
gets(msg);
if(!strcmp(msg,"exit"))
{write(fd, msg, sizeof(msg)); break;}
else write(fd, msg, sizeof(msg));
}
close(fd);
unlink(myfifo);
return 0;
}

我的输出:

output

如何确保应用程序在强制关闭时退出?

最佳答案

您的程序不检查 read()write() 的返回值。

由于读取失败不会用字符串“exit”填充 buf,因此您的中断条件永远不会发生。

关于c++ - 程序强制关闭管道一端的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560195/

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