7

mkfifo関数は、パスとモードの2つの引数を取ります。しかし、それが使用するパスの形式はわかりません。名前付きパイプを作成し、のパスとして作成する小さなプログラムを作成していmkfifoます。/home/username/Documentsたとえばを使用しますが、メッセージとともに常に-1を返しますError creating the named pipe.: File exists

私はこのディレクトリを何度もチェックしましたが、その中にパイプはありません。だから私は何が問題なのか疑問に思っています。mkfifoで使用するモードは0666または0777です。

4

2 に答える 2

8

既存のディレクトリmkfifo()の名前を指定したため、エラーが発生しました。存在しないファイルの名前を付ける必要があります。例:

mkfifo("/home/username/Documents/myfifo", 0600);
于 2012-10-23T22:07:01.410 に答える
2

の'path'引数mkfifo()は、フルパス、ディレクトリ、およびファイル名を指定する必要があります。

したがって、次のようになります。

char *myfifo="/home/username/Documents/mypipe";

mkfifo(myfifo, 0777);

補足として、8進数の許可ビットの使用を避け、代わりに(からsys/stat.h)名前付き定数を使用する必要があります。

mkfifo(myfifo, S_IRWXU | S_IRWXG | S_IRWXO);
于 2012-10-23T22:08:21.727 に答える