私は fifo の書き込みと読み取りを実装しようとしましたが、シナリオは次のようなものです。writer1 は fifo に 4 バイトを書き込み、reader1 はそれらの 2 バイトを読み取り、reader2 は次の 2 バイトを読み取ります。以下は私が行ったことです。
ライター.c
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
int main()
{
FILE *file;
unsigned char message[] = {0x66,0x66,0x67,0x67};
file = fopen("fifo1","wb");
fwrite(&message, 1,4,file);
}
リーダー.c
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
int main()
{
FILE *file;
unsigned char buff[2];
file = fopen("fifo1","rb");
fread(&buff, 1,2,file);
printf("%c\n",buff[0]);printf("%c\n",buff[1]);
}
次に、それらの両方に準拠し、最初の端末でreader1を実行し、2番目の端末でreader2を実行し、3番目の端末でwriterを実行しました。
最初の 2 バイト (ff) を一方のリーダーで取得し、次の 2 バイト (gg) をもう一方のリーダーで取得できると思っていましたが、思ったように機能しませんでした。誰が最初の 2 バイトを読み取ったか、次の 2 バイトを読み取ったかは気にしないことに注意してください。ここで重要なのは、両方のリーダーが一度に 2 バイトを読み取ることです。Ubuntu、GCC mkfifo を使用して fifo を作成しています。