Итак, я создал простую сервер-клиентскую программу, которая может общаться друг с другом с помощью файла fifo (msgfifo).
У меня такой вопрос: когда я набираю сообщение с пробелом, процесс получателя запускается несколько раз с количеством слов.
Этого я не ожидал, так как ожидал напечатать его как целое предложение, но это не так, и я хочу знать, почему.
Когда я набираю что-то для отправки, процесс отправляет сигнал SIGUSR1 другому.
/* receive msg part */
/* added this using sigset(SIGUSR1, receiveSIGUSR1) */
void receiveSIGUSR1()
{
char* msg = "\nIncoming Message from client...";
char* msg2 = "\nClient : ";
char buf[max_of_msg];
int fd;
write(1, msg, strlen(msg)+1);
fflush(stdin);
if( (fd = open("./msgpipe", O_RDONLY)) < 0)
{ perror("open"); exit(1); }
read(fd, buf, max_of_msg);
close(fd);
write(1, msg2, strlen(msg2)+1);
write(1, buf, strlen(buf)+1);
flag = 0;
}
/*send msg part*/
while(1)
{
flag = -1;
printf("\nType what u want to send : ");
scanf(" %s", msg);
if(flag == 0) continue;
printf("msgtaken\n");
fflush(stdin);
if( (fd = open("./msgpipe", O_RDWR)) < 0)
{ perror("exit"); exit(1); }
kill(clpid, 30);
sleep(2);
printf("Send message to Client..\n");
write(fd, msg, max_of_msg);
printf("Message Sent...\n");
}
Ожидаемый:
Клиент: Hello Server, это клиент
Фактический:
/ * сервер * /
Входящее сообщение от клиента ...
Привет
Входящее сообщение
от клиента ...
это
входящее сообщение от клиента ...
есть
Входящее сообщение от клиента ...
клиент
Введите что вы
хочу отправить:
/ клиент /
Введите то, что вы хотите отправить: Hello Server Это клиент
msgtaken
Отправить сообщение на сервер ..
Сообщение отправлено
Введите то, что вы хотите отправить: msgtaken
Отправить сообщение на сервер ..
Сообщение отправлено
Введите то, что вы хотите отправить: msgtaken
Отправить
сообщение на сервер ..
Сообщение отправлено
Введите то, что вы хотите отправить
: msgtaken
Отправить сообщение на сервер ..
Сообщение отправлено
Тип
что вы хотите отправить: msgtaken
Отправить сообщение на сервер ..
Сообщение отправлено
Введите то, что вы хотите отправить: