0

如何使用 exec 在文件上实现 chmod 命令?如果有人能给我提供代码,我将不胜感激。

4

3 回答 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 回答