Ich möchte eine Named Pipe erstellen und dann darauf schreiben und danach möchte ich es lesen. Hier ist mein Code:C - Erstellen/Schreiben/Lesen Named Pipe
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#define FIFO "fifo0001"
int main(intargc, char *argv[]){
char input[256];
FILE *fp;
char str[50];
printf("Please write some text:\n");
scanf("%s", input);
unlink(FIFO); /* Because it already exists, unlink it before */
umask(0);
if(mkfifo(FIFO, 0666) == -1){
printf("Something went wrong");
return EXIT_FAILURE;
}
if((fp = fopen(FIFO, "a")) == NULL){
printf("Something went wrong");
return EXIT_FAILURE;
}
fprintf(fp, "%s", input);
if(fgets(str, 50, fp) != NULL){
puts(str);
}
fclose(fp);
return EXIT_SUCCESS;
}
Nachdem ich einen Text geschrieben habe, passiert nichts mehr. Und es gibt keine Nachricht. Ich muss das Programm mit STRG C beenden. Jemand weiß, was los ist? Ich muss die Funktionen mkfifo, fopen, fprintf, fgets und fclose verwenden. Es wäre schön, wenn ich sie im Code behalten könnte.
FIFOs auf diese Weise nicht funktionieren. Sie benötigen zwei Programme, von denen eines (nur) in den FIFO schreibt und das andere (nur) liest. –
Ja, ich weiß, das ist mein Ziel, aber ich schrieb in einem Programm, um es zu testen. Aber wenn ich den Leseteil entferne, gibt es das gleiche Problem – Nono
Ihr Programm blockiert, bis ein anderes Programm das andere Ende des FIFO zum Lesen öffnet. –