gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:26 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com