使用 execv 调用 'ls'
Calling 'ls' with execv
我是系统调用和 C 编程的新手,正在完成我的大学作业。
我想调用 'ls' 命令并让它打印目录。
我有什么:(我在其中添加了评论,这样您就可以看到我通过每个变量看到的内容。
int execute( command* cmd ){
char full_path[50];
find_fullP(full_path, p_cmd);
//find_fullP successfully updates full_path to /bin/ls
char* args[p_cmd->argc];
args[0] = p_cmd->name;
int i;
for(i = 1; i < p_cmd->argc; i++){
args[i] = p_cmd->argv[i];
}
/*
* this piece of code updates an args variable which holds arguments
* (stored in the struct) in case the command is something else that takes
* arguments. In this case, it will hold nothing since the command
* will be just 'ls'.
*/
int child_process_status;
pid_t child_pid;
pid_t pid;
child_pid = fork();
if ( child_pid == 0 ) {
execv( full_path, args );
perror("fork child process error condition!" );
}
pid = wait( &child_process_status );
return 0;
}
我没有看到任何事情发生并且很困惑,有什么想法吗?
这是使用 execv
调用 ls
的最小程序。注意事项
args
的列表应该包括可执行文件作为第一个参数
args
的列表必须以 NULL 结尾
- 如果
args
设置正确,那么 args[0]
可以作为第一个参数传递给 execv
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main( void )
{
int status;
char *args[2];
args[0] = "/bin/ls"; // first arg is the full path to the executable
args[1] = NULL; // list of args must be NULL terminated
if ( fork() == 0 )
execv( args[0], args ); // child: call execv with the path and the args
else
wait( &status ); // parent: wait for the child (not really necessary)
return 0;
}
我是系统调用和 C 编程的新手,正在完成我的大学作业。
我想调用 'ls' 命令并让它打印目录。
我有什么:(我在其中添加了评论,这样您就可以看到我通过每个变量看到的内容。
int execute( command* cmd ){
char full_path[50];
find_fullP(full_path, p_cmd);
//find_fullP successfully updates full_path to /bin/ls
char* args[p_cmd->argc];
args[0] = p_cmd->name;
int i;
for(i = 1; i < p_cmd->argc; i++){
args[i] = p_cmd->argv[i];
}
/*
* this piece of code updates an args variable which holds arguments
* (stored in the struct) in case the command is something else that takes
* arguments. In this case, it will hold nothing since the command
* will be just 'ls'.
*/
int child_process_status;
pid_t child_pid;
pid_t pid;
child_pid = fork();
if ( child_pid == 0 ) {
execv( full_path, args );
perror("fork child process error condition!" );
}
pid = wait( &child_process_status );
return 0;
}
我没有看到任何事情发生并且很困惑,有什么想法吗?
这是使用 execv
调用 ls
的最小程序。注意事项
args
的列表应该包括可执行文件作为第一个参数args
的列表必须以 NULL 结尾- 如果
args
设置正确,那么args[0]
可以作为第一个参数传递给execv
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main( void )
{
int status;
char *args[2];
args[0] = "/bin/ls"; // first arg is the full path to the executable
args[1] = NULL; // list of args must be NULL terminated
if ( fork() == 0 )
execv( args[0], args ); // child: call execv with the path and the args
else
wait( &status ); // parent: wait for the child (not really necessary)
return 0;
}