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.