Я хочу создать именованный канал, а затем записать его, а затем я хочу его прочитать. Вот мой код:C - Создать/написать/прочитать именованный канал
#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;
}
После того, как я напишу текст, больше ничего не произойдет. И нет сообщения. Мне нужно бросить программу с помощью STRG C. Кто-то знает, что не так? Я должен использовать функции mkfifo, fopen, fprintf, fgets и fclose. Так было бы неплохо, если бы я мог держать их в коде.
FIFOs не работает таким образом. Вам нужны две программы, одна (только) запись в FIFO, а другая (только). –
Да, я знаю, что это моя цель, но я написал в одной программе, чтобы проверить ее. Но когда я удаляю читающую часть, возникает та же проблема. – Nono
Ваша программа будет блокироваться, пока другая программа не откроет другой конец FIFO для чтения. –