【问题标题】:change permissions in C by using exec()使用 exec() 更改 C 中的权限
【发布时间】:2010-04-05 00:11:04
【问题描述】:

如何使用 exec 对文件执行 chmod 命令?如果有人可以提供代码,我将不胜感激。

【问题讨论】:

  • 当你可以直接调用 chmod() 时为什么要 exec()?
  • 您是否应该使用粘性位来获得管理员访问权限?

标签: c unix chmod


【解决方案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】:

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

    诚然,最麻烦的是 fork() 部分,如果你的程序在 exec() 调用之后不需要做任何其他事情,那么只运行 exec() 系列函数之一而不分叉是相当好的(即使用 exec() 的练习)。

    【讨论】:

    • 我知道,但这是我用 fork - exec 做的练习。我不明白。
    • 告诉我们你不明白的地方。
    • 执行者的工作。所以如果你给我一个关于 chmod 和 exec 的例子,我会很高兴。
    【解决方案3】:

    试试这个: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 的用户。

    【讨论】:

    • 它说:错误:函数 execve 的参数太少。所以我把它改成execvp,然后我可以编译它,但是它不起作用。你知道可能是什么问题吗?
    • char *parmList[] = {"/bin/chmod", "0700", "/home/op/biaoaai/bead",NULL}; execvp("chmod", parmList);
    • 通常不赞成在作业问题的答案中提供完整/有效的代码。
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多