外部コマンドを実行するためにexec()またはその変種の1つを使用する必要があるオペレーティングシステムクラスのシェルを構築しています。現在、私はexeclp(command,command_parameters, (char *) NULL)
を使用しています。これはコマンドを正常に実行します(例えば、ls
が標準のディレクトリリストを返す)が、パラメータのいずれかを解析していないように見える(例えば、mkdir hello
を実行すると "hello:missing operand ... hello --help ' 。?。詳しくは)私が行方不明ですC execlp()が正しくパラメータを解析しないstring
else // Try to handle an external command
{
char *command_parameters = malloc(sizeof(raw_command)-sizeof(command));
strcpy(command_parameters, raw_command+strlen(command)+1);
pmesg(1, "Command is %s.\n", command);
pmesg(1, "The command parameters are %s.\n", command_parameters);
pid_t pid = fork();
pmesg(1, "Process forked. ID = %i. \n", pid);
int status;
if (fork < 0)
{
printf("Could not fork a process to complete the external command.\n");
exit(EXIT_FAILURE);
}
if (pid == 0) // This is the child process
{
pmesg(1, "This is the child process, running execlp.\n");
if (execlp(command, command_parameters, (char *) NULL) < 0)
{
printf("Could not execute the external command.\n");
exit(EXIT_FAILURE);
}
else { pmesg(1, "Executed the child process.\n"); }
}
else {while(wait(&status) != pid); } // Wait for the child to finish executing
pmesg(1, "The child has finished executing.\n");
}
(pmesg
)は、特定のデバッグレベルを特定の文を印刷し、デバッグタグである
おかげで、ここでの問題の
NULLにchar型のポインタをキャストの意味は何でしょうか。あるべき –