スーパーユーザープロセスを使用してパイプを作成する必要がありますmkfifo()
。そのパイプは、スーパーユーザーではないプロセスから書き込み可能でなければなりません。
読者:
int main () {
char *myfifo = "/tmp/myfifo";
int buf;
mkfifo(myfifo, 0777); //problem here
FILE *fp;
fp = fopen(myfifo,"r");
if ( fp == NULL) {
unlink(myfifo);
return -1;
}
printf("received: %d\n",buf);
fclose(fp);
unlink(myfifo);
return 0;
}
ライター:
int main() {
FILE *fp;
char *myfifo = "/tmp/myfifo";
fp = fopen(myfifo,"w");
if ( fp == NULL)
return -1;
fprintf(fp, "%d ", 2);
fclose(fp);
return 0;
}
./writer
とを呼び出しますsudo ./reader
。
私のライターがパイプに書き込もうとすると、セグメンテーション違反が返されます。そして、調べてみると、/tmp/myfifo
そのアクセス許可が見つかりましたprwxr-xr-x
が、必要ですprw-rw-rw-
。