N
N
Naxalenok2021-09-19 14:36:22
linux
Naxalenok, 2021-09-19 14:36:22

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;
}


By poke, I realized that the problem occurs when calling open ()
614720aa89793582985463.png

Answer the question

In order to leave comments, you need to log in

2 answer(s)
J
jcmvbkbc, 2021-09-19
@Naxalenok

realized that the problem occurs when calling open()

I understood correctly. Quote from man 7 fifo :
Normally, opening the FIFO blocks until the other end is opened also.

In order for the open call to return and the program to continue executing, you need to open the second end of fifo for reading.

T
Tony, 2021-09-19
@AntonSazonov

You have an infinite input request because you have an infinite input in a loop that breaks when you type "exit".
Actually, what is the question?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question