使用exec()更改C中的权限

时间:2010-04-05 00:11:05

标签: c unix chmod

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

3 个答案:

答案 0 :(得分:1)

从C代码开始,直接调用chmod(2)几乎肯定是比完成fork()ing和exec()的整个麻烦更好的选择。

不可否认,大多数麻烦都是fork()部分,如果你的程序在exec()调用之后不需要做任何其他事情,那么只运行一个exec()系列函数而不用分叉是相当不错的(对于使用exec()的练习,即)。

答案 1 :(得分:1)

我不会向你展示一个工作模型,但是execve()的工作原理如下:

char *args[] = {"foo", "argument1", "argument2", (char *)NULL};

...处理分叉......

res = execve("/sbin/foo", args, (char *)NULL);

...处理execve()失败....

execve()的第三个参数留给读者研究的练习,NULL可能适合或不适合你的作业。此外,由您自行决定res应该是什么类型以及它在成功时应该具有什么等级。注意转换为NULL。

single UNIX specification通常是一个很好的起点。

答案 2 :(得分: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的用户进行了更新。