Поэтому я сделал простую клиент-серверную программу, которая может общаться друг с другом с помощью файла 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 Это клиент
msgtaken
Отправить сообщение на сервер..
Сообщение отправлено
Введите текст, который вы хотите отправить: msgtaken
Отправить сообщение на сервер..
Сообщение отправлено
Введите то, что вы хотите отправить: msgtaken
Отправить сообщение на сервер..
Сообщение отправлено
Введите то, что вы хотите отправить send : msgtaken
Отправить сообщение на сервер..
Сообщение отправлено
Введите текст, который вы хотите отправить: msgtaken
Отправить сообщение на сервер..
Сообщение отправлено
Введите то, что вы хотите отправить: