使用system()在C中执行sudo命令

我正在编写一段C代码,它将在system("sudo ip route ...")函数调用中运行一些sudo命令。

这个调用是在主线程创建的pthread中完成的, sudo ./program在启动时用sudo ./program执行。

当我运行程序时,Ubuntu提示我输入密码给任何人:

[sudo] password for nobody:

我也尝试直接做system("ip route ...")但它给了我负面的回报意味着它没有被执行。

我应该在线程中做什么来允许system()调用使用从主程序inheritance的sudo权限?

你不需要做任何特殊的事情来inheritancesudo给你的root权限。 进程通常会自动inheritance父进程的权限。 system(3)不起作用的原因可能是因为你是root(见下文)或者因为你在一个线程上。

话虽这么说,不要使用system(3) 。 这是因为sudo使用setuid工作,并且与system()不兼容。 因此,请改用exec(3)系列函数( execlp()execvp()除外)。 有关更多信息,请参阅man 3 system

现在,说到这里, 不要使用system(3) exec(3) 。 相反,只需直接调用C API来操作IP表。 当你只是简化你的程序时,为什么要浪费系统资源来产生一两个新的过程呢? (此时你已经达到了你的问题属于Stack Overflow的程度)。

 system("echo XXXX | sudo -S gedit"); 

XXXX你的密码在哪里。