Answer the question
In order to leave comments, you need to log in
Infinite input request when calling open()?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
int main(){
int fd;
size_t size;
char name[]="aaa.fifо";
umask(0) ;// Обнуляем маску создания файлов текущего процесса для того, чтобы права доступа у создаваемого FIFO точно соответствовали параметру вызова mknod()
// Попытаемся создать FIFO с именем aaa.fifo в текущей директории
if (mknod(name, S_IFIFO | 0666, 0) < 0){
// Если создать FIFO не удалось, печатаем об этом сообщение и прекращаем работу
printf("Can\'t create FIFO\n");
_exit(-1);
}
if ((fd = open(name, O_WRONLY)) < 0){ // открывает aaa.fifo
// Если открыть FIFO не удалось, печатаем об этом сообщение и рекращаем работу
printf("Can\'t open FIFO for writing\n");
_exit(-1);
}
char message[60];
while(true){
message[0] = 0;
std::cin.clear();
std::cin >> message;// читаем сообщения из консоли
if(!strcmp(message,"exit")) // если обнаружен,exit выходим из цикла
{
printf("Exit to programm\n");
break;
}
size = write(fd, message, 60); // 1 - это /0
if (size < strlen(message)) { // Если записалось меньшее количество байт, то сообщаем об ошибке и завершаем работу
printf("Can\'t write all string to FIFO\n");
_exit(-1);
}
}
close(fd);// Закрываем поток
return 0;
}
Answer the question
In order to leave comments, you need to log in
realized that the problem occurs when calling open()
Normally, opening the FIFO blocks until the other end is opened also.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question