在 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;
}
我打电话给./writer
和sudo ./reader
。
当我的作者试图在管道中写入 return 一个分段错误。如果我查看 /tmp/myfifo
,我发现权限 prwxr-xr-x
,但我想要 prw-rw-rw-
.
您的编写器出现段错误,因为您打开它进行写入,但没有写入权限。因此 fp
将是 NULL
,而您的 fprintf
失败。
您的 FIFO 权限不正确的原因可能是因为您的 umask
是 022
,这意味着这些位正在从您发送到 mkfifo
的掩码中清除。这将导致您看到的权限。要解决此问题,请使用 umask
调用更改 umask
,或使用 chmod
.
明确设置权限
但是你真的希望你的 FIFO 是可执行的吗?
我需要使用来自超级用户进程的 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;
}
我打电话给./writer
和sudo ./reader
。
当我的作者试图在管道中写入 return 一个分段错误。如果我查看 /tmp/myfifo
,我发现权限 prwxr-xr-x
,但我想要 prw-rw-rw-
.
您的编写器出现段错误,因为您打开它进行写入,但没有写入权限。因此 fp
将是 NULL
,而您的 fprintf
失败。
您的 FIFO 权限不正确的原因可能是因为您的 umask
是 022
,这意味着这些位正在从您发送到 mkfifo
的掩码中清除。这将导致您看到的权限。要解决此问题,请使用 umask
调用更改 umask
,或使用 chmod
.
但是你真的希望你的 FIFO 是可执行的吗?