server.c と client.c の 2 つの C ファイルがあります。サーバーは fifo ファイルを作成し、入力を待って常に読み込む必要があります。クライアントは PID を取得し、その PID を fifo に書き込みます。これは、最初に起動するサーバー ファイルです。
int main(){
int fd;
int fd1;
int bytes_read;
char * buffer = malloc(5);
int nbytes = sizeof(buffer);
if((fd = mkfifo("serverfifo",0666)) == -1) printf("create fifo error");
else printf("create fifo ok");
if ((fd1 = open("serverfifo",O_RDWR)) == -1) printf("open fifo error");
else{
printf("open fifo ok");
while(1){
bytes_read = read(fd,buffer,nbytes);
printf("%d",bytes_read);
}
}
return(0);
}
そして私のクライアントファイル:
int main(){
int fd;
int pid = 0;
char *fifo;
int bytes;
if ((pid = getpid()) == 0) printf("pid error");
char pid_s[sizeof(pid)];
sprintf(pid_s,"%d",pid);
if ((fd = open ("serverfifo",O_RDWR)) == -1)printf("open fifo error");
else {
printf("open fifo ok");
bytes = write(fd,pid_s, sizeof(pid_s));
printf("bytes = %d",bytes);
}
close(fd);
return(0);
}
私が得ている2つの主な問題は次のとおりです。pidをファイルに書き込むと、書き込んだバイト数が返されるため、問題ないように見えますが、fifoファイルのプロパティを確認すると、0バイトと表示されます。2 番目の問題は、読み取りが機能しないことです。表示される前にprintfを実行すると、実行されず、読み取りが何も返されず、フリーズします。サイトには同様の投稿がたくさんあることに気づきましたが、役立つものは何も見つかりませんでした。CodeBlocks で Ubuntu と GCC コンパイラを使用しています。