C 接受多字命令的基本shell
我试图实现一个接受命令的shell;然而,我不能让它正常工作。例如,如果我键入“ls-a”,我会得到以下结果: 无效选项--' " 有关详细信息,请尝试“ls--help” 我可能犯了一些严重的错误,因为我是初学者,所以请原谅我。另外,我将把在命令中读取的代码放入函数中。这就像测试一样-谢谢C 接受多字命令的基本shell,c,linux,shell,C,Linux,Shell,我试图实现一个接受命令的shell;然而,我不能让它正常工作。例如,如果我键入“ls-a”,我会得到以下结果: 无效选项--' " 有关详细信息,请尝试“ls--help” 我可能犯了一些严重的错误,因为我是初学者,所以请原谅我。另外,我将把在命令中读取的代码放入函数中。这就像测试一样-谢谢 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#include <stddef.h>
int main()
{
pid_t pid;
int status;
char* token;
char* argv[20];
char input[100];
printf("AP> ");
while (1)
{
fgets(input, 100, stdin);
token = strtok(input, " ");
int i = 0;
//walk through other tokens
while (token != NULL) {
argv[i] = malloc(strlen(token) + 1);
strncpy(argv[i], token, strlen(token));
//argv[i] = token;
i++;
token = strtok(NULL, " ");
}
argv[i] = NULL; //argv ends with NULL
pid = fork();
if (pid < 0)
{
perror("fork error");
return EXIT_FAILURE;
}
else if (pid == 0)
{
// child process
execvp(argv[0], argv);
perror("execl error");
return EXIT_FAILURE;
}
else {
// parent process
if (waitpid(pid, &status, 0)<0)
{
perror("waitpid error");
return EXIT_FAILURE;
}
}
printf("AP> ");
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
pid_t pid;
智力状态;
字符*令牌;
char*argv[20];
字符输入[100];
printf(“AP>”);
而(1)
{
fgets(输入,100,标准输入);
令牌=strtok(输入“”);
int i=0;
//浏览其他代币
while(令牌!=NULL){
argv[i]=malloc(strlen(令牌)+1);
strncpy(argv[i],token,strlen(token));
//argv[i]=令牌;
i++;
令牌=strtok(空,“”);
}
argv[i]=NULL;//argv以NULL结尾
pid=fork();
if(pid<0)
{
perror(“分叉错误”);
返回退出失败;
}
否则如果(pid==0)
{
//子进程
execvp(argv[0],argv);
perror(“执行错误”);
返回退出失败;
}
否则{
//父进程
if(waitpid(pid,&status,0)如果在内部while循环之后插入以下循环,那么您将看到在while循环开始之前没有删除input
末尾的换行符
for (i=0; argv[i]; i++)
printf("argv[%d] = '%s'\n", i, argv[i]);
或者,您可以使用:
" \n"
作为您的分隔符,而不仅仅是
" "