我有一个C程序打开一个mp3并在同一个文件夹中提取jpg图稿。如果我执行没有root权限的程序,我会崩溃。如果我用sudo执行它,它可以正常工作。
现在,我需要另一个C程序,当它需要所选mp3的jpg图片时启动上一个程序。
我试着打电话给popen(" ./ firstProgram test.mp3"," r")功能或系统(" /(绝对路径)/ firstProgram test.mp3& #34;)通过在命令中使用sudo来调用它们,或者使用相对路径或绝对路径来调用它们。但似乎没有版本可行。
如何从第二个程序中成功启动第一个程序?
谢谢!
答案 0 :(得分:0)
fork然后使用execl
char sudo[]="/usr/bin/sudo";
char pbin[]="/usr/local/bin/puppet";
NOTICE("running puppet: %s %s",sudo,pbin);
errno=0;
execl(sudo,sudo,pbin,(char *)NULL);
/* we should never get as far as this */
显然,我建议您阅读man execl
了解更多信息
答案 1 :(得分:0)
Unix(Linux)系统包含了C编程手册,因为它可能永远存在。请参阅第2节“系统调用”。
这个维基百科页面解释了Unix手册“部分”
您可以阅读有关“系统调用”的手册的第2部分
尝试命令:man 2 setuid
这将为您提供setuid()系统调用的手册,我认为这是您想要的。
该手册页还将列出对您可能想要的其他相关系统调用的引用。
请记住,在编译C程序并使用执行低级硬件访问的系统调用时,要使用-O2或-O3选项来执行gcc。手册中提到了它。
最终,setuid()系统调用使一个用户启动正在运行的进程,将该正在运行的进程的UID更改为与其他用户一样运行。 (例如,您可能会看到Apache运行为“apache”,即使它是由root启动的。)
setuid(0)让你成为root。