MST

星途 面试题库

面试题:C语言Linux命名管道权限动态调整

假设已经使用C语言在Linux系统中创建了一个命名管道,初始权限为所有用户可读可写。在程序运行过程中,如何动态地修改权限,使得只有创建者所在用户组可以读写,其他用户无任何权限?请详细说明思路并给出代码示例。
47.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

思路

  1. 在Linux系统中,可以使用chmod函数来修改文件(包括命名管道)的权限。
  2. 首先获取当前进程的用户组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函数将命名管道的权限修改为只有创建者所在用户组可读可写,其他用户无权限。最后删除命名管道。注意,在实际使用中,你可能需要在修改权限后添加使用命名管道的相关代码。