Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用execvp在c中编写ls命令_C_Linux_Shell_Ls_Execvp - Fatal编程技术网

如何使用execvp在c中编写ls命令

如何使用execvp在c中编写ls命令,c,linux,shell,ls,execvp,C,Linux,Shell,Ls,Execvp,我试图编写一个简单的ls命令,所以我输入ls r,我想检查我的代码是否正确。输出没有显示任何内容。代码如下: int main(void){ char *line; char *args[16]; pid_t pid; line = (char*)malloc(1024); printf("$ "); fgets(line,1024,stdin); args[0] = strtok(line, " "); args[1] = str

我试图编写一个简单的ls命令,所以我输入ls r,我想检查我的代码是否正确。输出没有显示任何内容。代码如下:

int main(void){

  char *line;
  char *args[16];
  pid_t pid; 

    line = (char*)malloc(1024);
    printf("$ "); 
    fgets(line,1024,stdin);
     args[0] = strtok(line, " ");
     args[1] = strtok(NULL, " "); 

    printf("%s\n" , args[0]);
    printf("%s", args[1]);

    execvp(args[0], args);
}

谢谢大家

查看现有自由软件外壳的源代码,即sash或read

阅读手册页。请注意,execvp可能会失败。当它成功时,它不会返回!另外,如果是缓冲的,则需要调用

您可能缺少一些对shell是进程的基本理解,请阅读等等

先试试:

int main(void){
 char line[1024];
 char *args[16];
 memset (args, 0, sizeof(args));
 printf("$ ");
 fflush(NULL); 
 fgets(line,sizeof(line),stdin);
 args[0] = strtok(line, " ");
 args[1] = strtok(NULL, " "); 
 printf("%s\n" , args[0]);
 printf("%s", args[1]);
 fflush(NULL);
 execvp(args[0], args);
 perror("execvp");
 return EXIT_FAILURE;
}
不要忘记,fgets、execvp、perror所需的相关include指令

也请阅读

使用gcc-Wall-g编译。了解如何使用调试器gdb和strace

顺便说一句,真正的炮弹不使用;它们显式地解析行,而且必须这样做,因为shell可以用反斜杠或引号转义空格


实际上,试试strace ls;您将发现/bin/ls使用。

高级Linux编程的链接已断开。谢谢。输出立即显示exevcp:bad地址这意味着什么?请仔细阅读execvp3和execve2手册页。在args上有一个您没有遵循的约束。我改进了我的代码。但是你需要多读书。