如何使用execvp在c中编写ls命令
我试图编写一个简单的ls命令,所以我输入ls r,我想检查我的代码是否正确。输出没有显示任何内容。代码如下:如何使用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
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上有一个您没有遵循的约束。我改进了我的代码。但是你需要多读书。