Я создал одну программу, похожую на bash, но когда я попытался выполнить, она работает нормально только в первый раз, а затем после того, как она не работает должным образом
Последний выполненный вывод постоянно отображается вместо запроса нового ввода
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/wait.h>
char full_cmd[20];
void command_source(char *cmd)
{
FILE *fp;
char output[20];
char *token;
token = strtok(cmd," ");
strcpy(full_cmd,"which ");
strcat(full_cmd,token);
fp = popen(full_cmd,"r");
while (fgets(output, 20, fp) != NULL) {
strcpy(full_cmd,output);
}
full_cmd[strlen(full_cmd)-1] = '\0';
token = strtok(NULL," ");
while (token != NULL)
{
strcat(full_cmd,token);
token = strtok(NULL," ");
}
}
void get_input(char input[10])
{
printf("Enter the command:");
scanf("%[^\n]s",input);
}
int launch_shell(char *buff[50],int status)
{
pid_t pid = fork();
if( pid == 0 )
{
execv(buff[0],buff);
}
else if (pid > 0)
{
pid_t wpid = waitpid(pid, &status, 0);
}
else
return 0;
return 1;
}
int main()
{
char *buff[50];
int status;
char input[10];
int count=0,ret=1;
while(ret == 1)
{
get_input(input);
command_source(input);
strcpy(buff[0],full_cmd);
buff[1] = NULL;
int ret = launch_shell(buff,status);
}
}
Ожидаемый:
Enter the command:ls
server.c server
Enter the command:ls -l
server.c
server
Фактические результаты:
Enter the command:ls
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
server server.c
...
Пожалуйста, помогите мне, ребята, выяснить проблему в этом. Я трачу весь день на это. Но я не мог.