2
名前付きパイプを作成してから書き込んだり、その後に読みたいと思っています。ここに私のコードです: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を使う必要があります。もし私がコードにそれらを保持することができればいいですね。
FIFOはこのように動作しません。 2つのプログラムが必要です.1つはFIFOへの書き込み、もう1つは読み取りのみです。 –
はい私はそれが私の目標だと知っていますが、テストするために1つのプログラムに書きました。しかし、読み込み部分を削除すると、同じ問題が発生します。 – Nono
別のプログラムが読み込みのためにFIFOのもう一方の端を開くまで、プログラムはブロックされます。 –