如何使用 exec 在文件上实现 chmod 命令?如果有人能给我提供代码,我将不胜感激。
问问题
2422 次
3 回答
1
从 C 代码中,直接调用chmod(2)几乎肯定是比经历 fork()ing 和 exec()ing 的整个麻烦更好的选择。
诚然,最麻烦的是 fork() 部分,如果你的程序在 exec() 调用之后不需要做任何其他事情,那么只运行一个 exec() 系列函数而不分叉是相当好的(对于练习使用 exec(),即)。
于 2010-04-05T00:18:40.743 回答
1
我不会向您展示一个工作模型,但 execve() 的工作方式如下:
char *args[] = {"foo", "argument1", "argument2", (char *)NULL};
... 手柄分叉 ....
res = execve("/sbin/foo", args, (char *)NULL);
...处理 execve() 失败 ....
execve() 的第三个参数留作练习供读者研究,NULL 可能适合也可能不适合您的作业。此外,由您决定res
应该是什么类型以及成功应该等于什么。注意强制转换为 NULL。
单一的UNIX 规范通常是一个很好的起点。
于 2010-04-05T01:27:05.463 回答
0
试试这个: 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 进行了更新。
于 2010-04-05T00:36:41.180 回答