現在C言語で、FIFOファイルを用いてプロセス間を通信する方法について勉強しているのですが、コードを書いてみても思う通りに動きません。
具体的には、client.cをコンパイルし実行すると普通にデータを受け取ってもらえているように見えるがFIFOファイルが作成されず、その後server.cを実行しても当然データが受け取れない。しかしFIFOファイルが作成されており、中を見ようと開くとOSがフリーズする。といった状況です。
調べてはみましたが、よくわからなかったのでよろしければご教授お願い致します。
--環境--
CentOS7.4 (vmware上)
gcc 4.8.5-28
送信側 client.c
C言語
1#include <sys/types.h> 2#include <sys/stat.h> 3#include <fcntl.h> 4#include <unistd.h> 5#include <stdio.h> 6#include <stdlib.h> 7#include <string.h> 8 9int main(void) 10{ 11 int fifodes ; 12 char buffer[256]; 13 14 /* FIFOファイルを開く */ 15 fifodes = open("my_fifo",O_WRONLY); 16 17 fgets(buffer,256,stdin); 18 19 /* 送信する */ 20 write(fifodes,buffer,strlen(buffer)+1); 21 22 close(fifodes); 23 24return(0); 25}
受信側 Server.c
C言語
1#include <sys/types.h> 2#include <sys/stat.h> 3#include <fcntl.h> 4#include <unistd.h> 5#include <stdio.h> 6#include <stdlib.h> 7#include <string.h> 8 9int main(void) 10{ 11 int fifodes ; 12 char buffer[256]; 13 14 /* 「my_fifo」というFIFOファイルを作成する */ 15 mkfifo("my_fifo",0777); 16 17 /* FIFO ファイルを開く */ 18 fifodes = open("my_fifo",O_RDONLY); 19 20 /* データを受信する */ 21 read(fifodes,buffer,256); 22 23 printf("Message: %s",buffer); 24 25 close(fifodes); 26 27return(0); 28}
何か足りない情報があれば言ってもらえれば追記します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。