изменить разрешения в C с помощью exec () - PullRequest
0 голосов
/ 05 апреля 2010

Как реализовать команду chmod для файла с помощью exec? Буду признателен, если кто-нибудь сможет предоставить мне код.

Ответы [ 3 ]

1 голос
/ 05 апреля 2010

Я не собираюсь показывать вам работающую модель, но execve () работает следующим образом:

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

... обрабатывать разветвления ....

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

... handle execve () не работает ....

Третий аргумент execve () оставлен читателю для изучения, NULL может подходить или не подходить для вашего задания.Кроме того, вам решать, какой тип res должен быть и что он должен быть равен в случае успеха.Обратите внимание на приведение NULL.

Одна спецификация Single UNIX обычно является хорошим местом для начала.

1 голос
/ 05 апреля 2010

Из кода C прямой вызов chmod (2) почти наверняка будет лучшим выбором, чем проходить через все хлопоты с fork () и exec ().

По общему признанию, большая часть этой проблемы - это часть fork (), и если вашей программе больше не нужно ничего делать после вызова exec (), тогда достаточно просто запустить одну из функций семейства exec () без разветвления. (для упражнения по использованию exec (), то есть).

0 голосов
/ 05 апреля 2010

попробуйте это: 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.

...