exec を使用してファイルに chmod コマンドを実装するにはどうすればよいですか? 誰かが私にコードを提供していただければ幸いです。
3 に答える
動作モデルを示すつもりはありませんが、execve() は次のように動作します。
char *args[] = {"foo", "argument1", "argument2", (char *)NULL};
...フォークのハンドル....
res = execve("/sbin/foo", args, (char *)NULL);
... execve() の処理に失敗しました ....
execve() の 3 番目の引数は、読者が調査するための課題として残されています。NULL は、割り当てに適している場合と適していない場合があります。さらに、どのタイプresが必要であり、成功時に何と等しいかを決定するのはあなた次第です。NULL のキャストに注意してください。
通常、単一のUNIX 仕様から始めるのが適切です。
C コードから直接chmod(2)を呼び出すことは、fork()ing と exec()ing のすべての面倒を経るよりも、ほぼ確実に良い選択です。
確かに、その手間のほとんどは fork() 部分であり、プログラムが exec() 呼び出しの後に他に何もする必要がない場合は、fork せずに exec() ファミリ関数の 1 つを実行するだけで十分です ( exec() の使用を練習してください、つまり)。
これを試してください: 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を使用して更新しました。