【发布时间】:2010-04-05 00:11:04
【问题描述】:
如何使用 exec 对文件执行 chmod 命令?如果有人可以提供代码,我将不胜感激。
【问题讨论】:
-
当你可以直接调用 chmod() 时为什么要 exec()?
-
您是否应该使用粘性位来获得管理员访问权限?
如何使用 exec 对文件执行 chmod 命令?如果有人可以提供代码,我将不胜感激。
【问题讨论】:
我不会向您展示一个工作模型,但 execve() 的工作方式如下:
char *args[] = {"foo", "argument1", "argument2", (char *)NULL};
... 处理分叉 ....
res = execve("/sbin/foo", args, (char *)NULL);
...处理 execve() 失败 ....
execve() 的第三个参数留作练习供读者研究,NULL 可能适合也可能不适合您的作业。此外,由您决定res 应该是什么类型以及成功时应该等于什么类型。注意强制转换为 NULL。
single UNIX specification 通常是一个不错的起点。
【讨论】:
从 C 代码中,直接调用 chmod(2) 几乎肯定是比经历 fork()ing 和 exec()ing 的整个麻烦更好的选择。
诚然,最麻烦的是 fork() 部分,如果你的程序在 exec() 调用之后不需要做任何其他事情,那么只运行 exec() 系列函数之一而不分叉是相当好的(即使用 exec() 的练习)。
【讨论】:
试试这个:http://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/execve.htm 另见:http://linux.about.com/library/cmd/blcmdl3_execvp.htm
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
main()
{
pid_t pid;
char *parmList[] = {"/bin/chmod", "0700", "/home/op/biaoaai/bead",NULL};
if ((pid = fork()) ==-1) //fork failed
perror("fork error");
else if (pid == 0) { //child (pid==0 if child)
execvp("chmod", parmList);
printf("Return not expected. Must be an execve error.n");
} else { //parent (pid==child process)
//parent specific code goes here
}
}
编辑:我从来没有真正编译过...更新了使用 paramList 的用户。
【讨论】: