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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage