Странное поведение программы при принудительном закрытии одного конца трубы

Я пытаюсь создать элементарную программу чата для 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;
}

Мой вывод:

выход

Как убедиться, что приложение закрывается при принудительном закрытии приложения?

0

Решение

Ваша программа не проверяет возврат за read() а также write(),

Поскольку не удалось прочитать не заполнить buf со строкой «выход» ваше условие разрыва никогда не возникает.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector