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

Give permissions from super user process in mkfifo

我需要使用来自超级用户进程的 mkfifo() 创建一个管道,该管道必须可以从非超级用户进程写入。

Reader:

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

当我的作者试图在管道中写入 return 一个分段错误。如果我查看 /tmp/myfifo,我发现权限 prwxr-xr-x,但我想要 prw-rw-rw-.

您的编写器出现段错误,因为您打开它进行写入,但没有写入权限。因此 fp 将是 NULL,而您的 fprintf 失败。

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

明确设置权限

但是你真的希望你的 FIFO 是可执行的吗?