open () blockiert, wenn versucht wird, die Pipe zum Lesen zu öffnen
Ich habe zwei Prozesse, einen Server und einen Client, die über Pipes (C ++, Linux) kommunizieren sollen. Der Server öffnet die Pipe mit demO_RDONLY
flag, und der Client mitO_WRONLY
. Der Server blockiert jedoch amopen
Funktion, während der Client erfolgreich zu laufen scheint (dieopen
Funktion liefert Erfolg und das auchwrite
funktionen).
Ich habe das gelesen, wenn dieO_NONBLOCK
Wenn das Flag gesetzt ist, wird die Lesefunktion fortgesetzt, aber ich möchte nicht, dass sie fortgesetzt wird, wenn kein Client verbunden ist - das Blockieren ist in Ordnungbis ein Client verbunden ist, aber in meinem Fall bleibt es blockiert, auch wenn der Client nicht mehr ausgeführt wird ...
Kannst du mir bitte sagen, was ich falsch mache ...?
Hier ist der Code:
// Server side
int pipe;
int status, nr_read = 0;
status = mkfifo(FIFO_NAME, 0666);
if (status < 0)
{
// If the file already exists, delete it
unlink(FIFO_NAME);
// Try again
status = mkfifo(FIFO_NAME, 0666);
if(status < 0)
{
printf("mkfifo error: %d\n", status);
return status;
}
}
pipe = open(FIFO_NAME, O_RDONLY);
printf("Never gets here...\n");
[...]
nr_read = read(pipe, my_char_array, CHAR_ARRAY_SIZE);
[...]
close(pipe);
unlink(FIFO_NAME);
Es kommt nie zur "printf" -Zeile ...
// Client side:
int pipe, nr_sent = 0;
int status = 0;
pipe = open(FIFO_NAME, O_WRONLY);
if (pipe < 0)
{
printf("open fifo error: %d\n", status);
return pipe;
}
[...]
nr_sent = write(pipe, my_char_array, CHAR_ARRAY_LENGTH);
[...]
close(pipe);
BEARBEITEN
Ich habe die Zeile nicht erwähnt#define FIFO_NAME "MYFIFO"
... und hier war das Problem: Wie Jody Hagins sagte, versuchten sie, verschiedene Dateien zu öffnen, da der Pfad ein relativer war und die Prozesse von verschiedenen Ordnern aus gestartet wurden.