在mkfifo中为超级用户进程授予权限

时间:2015-01-23 12:49:25

标签: c linux mkfifo

我需要从超级用户进程使用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;
}

我致电./writersudo ./reader

当我的作家尝试在管道中写入返回分段错误时。如果我查看/tmp/myfifo,我会发现权限prwxr-xr-x,但我想要prw-rw-rw-

1 个答案:

答案 0 :(得分:1)

你的作家是segfaulting,因为你打开它进行写作,但没有权限写入它。因此fp将为NULL,而您的fprintf将失败。

您的FIFO权限不正确的原因可能是因为您的umask022,这意味着这些位正从您发送到mkfifo的掩码中清除。这将导致您看到的权限。要解决此问题,请使用umask调用更改umask,或使用chmod明确设置权限。

但你真的希望你的FIFO能够执行吗?