0

exec を使用してファイルに chmod コマンドを実装するにはどうすればよいですか? 誰かが私にコードを提供していただければ幸いです。

4

3 に答える 3

1

動作モデルを示すつもりはありませんが、execve() は次のように動作します。

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

...フォークのハンドル....

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

... execve() の処理に失敗しました ....

execve() の 3 番目の引数は、読者が調査するための課題として残されています。NULL は、割り当てに適している場合と適していない場合があります。さらに、どのタイプresが必要であり、成功時に何と等しいかを決定するのはあなた次第です。NULL のキャストに注意してください。

通常、単一のUNIX 仕様から始めるのが適切です。

于 2010-04-05T01:27:05.463 に答える
1

C コードから直接chmod(2)を呼び出すことは、fork()ing と exec()ing のすべての面倒を経るよりも、ほぼ確実に良い選択です。

確かに、その手間のほとんどは fork() 部分であり、プログラムが exec() 呼び出しの後に他に何もする必要がない場合は、fork せずに exec() ファミリ関数の 1 つを実行するだけで十分です ( exec() の使用を練習してください、つまり)。

于 2010-04-05T00:18:40.743 に答える
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 に答える