面试题答案
一键面试思路
- 在Linux系统中,可以使用
chmod
函数来修改文件(包括命名管道)的权限。 - 首先获取当前进程的用户组ID,然后使用
chmod
函数将命名管道的权限设置为只有创建者所在用户组可读可写,其他用户无权限。
代码示例
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <grp.h>
int main() {
// 创建命名管道
if (mkfifo("mypipe", 0666) == -1) {
perror("mkfifo");
return 1;
}
// 获取当前进程的用户组ID
gid_t gid = getgid();
// 设置命名管道的权限为用户组可读可写,其他用户无权限
struct group *grp = getgrgid(gid);
if (grp == NULL) {
perror("getgrgid");
return 1;
}
// 修改权限
if (chmod("mypipe", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) == -1) {
perror("chmod");
return 1;
}
printf("命名管道权限已修改,只有 %s 用户组可读写\n", grp->gr_name);
// 这里可以添加使用命名管道的代码
// 删除命名管道
if (unlink("mypipe") == -1) {
perror("unlink");
return 1;
}
return 0;
}
上述代码首先创建了一个命名管道,然后获取当前进程的用户组ID,接着使用chmod
函数将命名管道的权限修改为只有创建者所在用户组可读可写,其他用户无权限。最后删除命名管道。注意,在实际使用中,你可能需要在修改权限后添加使用命名管道的相关代码。