c - c程序中的sudo权限问题

标签 c permissions command sudo

我正在编写一个 c 程序,它执行一系列 bash shell 命令以获取机器中的处理器数量并相应地分配程序的亲缘关系。这是我的功能:

int getNoOfCPUs()
{

    system("sudo nproc | sudo tee /home/sanuri/Desktop/tempnproc.txt");
    printf("Created temp file..... \n");
    FILE *fr;
    fr = fopen ("/home/sanuri/tempnproc.txt", "r");

    printf("Opened file..... \n");
    printf("%d",errno);
    int i=0;
    int number[3];
    do{
        if(fr==NULL){
            fr = fopen ("/home/sanuri/tempnproc.txt", "r");
        }

        number[i] = fgetc(fr);
        if( feof(fr) )
        {
            break ;
        }
        printf("%c", number[i]);
        i++;
    }while(1);

    if(fr!=NULL){
        fclose(fr);
    }
    return number; 
}

我仍然停留在 fopen 上。似乎由于权限问题而无法打开文件。此外,我无法通过此 c 程序运行最有用的命令,因为我必须使用 sudo 来运行它们并且必须提供我的密码才能成功执行命令。我将自己添加到“sudo”组。但是,如果没有 sudo 并提供我的密码,我将无法运行这些命令。这个问题的一般解决方案是什么?我该怎么做才能取消提供密码的要求,这样我就可以在没有 sudo 的情况下通过 c 程序简单地运行命令?如果解决方案足够通用,可以使我的程序可移植到任何 linux 平台,那就更好了。

最佳答案

首先,sudo tee ... 将打开指定的文件,如果它不存在,作为用户 root,所以你将无法以非 root 用户身份查看文件。

其次,不要在程序中使用 sudo,您应该使用 sudo 调用程序本身。这样,如果您已经以 root 身份运行它,就不会进行不必要的 sudo 调用。

第三,(至少,在我的 Ubuntu 14.04 机器上),运行 nproc 似乎首先不需要 sudo

最后,由于您使用的是 Linux,您最好使用 popen 来捕获 nproc 的输出,而不是将其通过管道传输到文件。

此外,您没有检查第二次 fopen 调用的结果,这很可能会导致段错误。

关于c - c程序中的sudo权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25081063/

相关文章:

python - 权限错误 : [Errno 13] Permission denied: 'C:\\Program Files\\Python35\\Lib\\site-packages\\six.py'

linux - 在 Linux 中阻止用户访问网络服务

view - Eclipse RCP : org. eclipse.ui.views.showView 参数

c - Ncurses 读取小键盘键和转义

c++ - 如何使用 GStreamer 和 XOverlay 在 GTK+ 应用程序窗口中嵌入视频?

javascript - 为我的扩展请求可选权限时出现 "chrome.permissions is not available"

Linux 脚本 - 密码步骤减少流程

c++ - 原子 decref 实现之间的区别

c - C 中 const 函数参数存储在内存中的哪个位置?

java - 如何在 Android 应用程序中运行重命名 shell 命令(root)