0

スーパーユーザープロセスを使用してパイプを作成する必要があります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-

4

1 に答える 1