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

发布于 2024-08-27 20:26:39 字数 51 浏览 7 评论 0原文

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

How can I implement chmod command on file by using exec? I would appreciate if anyone can provide me a code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小…红帽 2024-09-03 20:26:39

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

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

... 处理分叉 ....

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

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

留下了 execve() 的第三个参数作为供读者研究的练习,NULL 可能适合也可能不适合您的作业。此外,由您决定 res 应该是什么类型以及成功时它应该等于什么。注意转换 NULL。

单一 UNIX 规范通常是一个不错的起点。

I'm not going to show you a working model, but execve() works like this:

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

... handle forking ....

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

... handle execve() failing ....

The third argument to execve() is left as an exercise for the reader to research, NULL may or may not be suitable for your assignment. Additionally, its up to you to determine what type res should be and what it should equal on success. Notice casting NULL.

The single UNIX specification is usually a good place to start.

盗琴音 2024-09-03 20:26:39

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

诚然,大部分麻烦是 fork() 部分,如果您的程序在 exec() 调用之后不需要执行任何其他操作,那么只需运行 exec() 系列函数之一而不进行分叉就相当不错了(对于练习使用 exec(),即)。

From C code, directly calling chmod(2) will almost certainly be a better choice than going through the whole hassle of fork()ing and exec()ing.

Admittedly, most of that hassle is the fork() part, and if your program does not need to do anything else after the exec() call, then just running one of the exec() family functions without forking is reasonably fine (for an exercise in using exec(), that is).

记忆里有你的影子 2024-09-03 20:26:39

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

try this: http://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/execve.htm
also see: 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
     }
  }

Edit: I never actually compiled... updated with users working paramList.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文