Nonblocking read von named pipe (fifo)



  • Hallo zusammen,

    ich muss nichtblockierend aus einer named pipe lesen.
    Dazu habe ich bisher das hier versucht (hab die fehlerbehandlung mal rausgenommen, damits kürzer ist):

    int fd;
    char buffer[1024];
    mkfifo(path, S_IRWXU | S_IRWXG | S_IRWXO);
    fd = open(path, O_RDONLY, O_NONBLOCK);
    read(fd, buffer, 1024); //das blockiert...
    

    Leider blockiert der read aufruf. Habt ihr eine Idee, was ich da machen kann?



  • select



  • Q schrieb:

    fd = open(path, O_RDONLY, O_NONBLOCK);
    

    Meintest du

    fd = open(path, O_RDONLY | O_NONBLOCK, 0);
    

    ?



  • seldon schrieb:

    Meintest du

    fd = open(path, O_RDONLY | O_NONBLOCK, 0);
    

    ?

    Danke! Genau daran lags. Dachte, dass das nonblock zum 3. parameter gehört.

    Übrigens: Seit wann hat C Funktionsüberladung? Laut manpage gibt es open auch mit 2 Parametern.



  • Bei mir ist das in /usr/include/fcntl.h definiert als

    int open (const char *file, int oflag, ...);
    

    (auf Kernkram zusammengestrichen). mode wird ja nur benutzt, wenn O_CREAT angegeben und die Datei neu erstellt wird. Was passiert, wenn man O_CREAT angibt, die Datei neu erstellt wird und mode nicht angegeben ist, wage ich allerdings nicht zu beantworten. Durch den C-Standard dürfte das nicht gedeckt sein; ob POSIX da etwas definiert, kann ich aus dem Stand nicht beantworten.


Anmelden zum Antworten