이상한 문제가 있습니다. 숙제의 경우 기본 bash 스크립트를 작성하고 있지만 execv()를 실행하여 cp 명령을 실행하면 작동하지 않습니다. ls 및 그룹과 작동하지만 cp는 작동하지 않습니다. 나는 오류를 분리하기 위해 나의 cp 프로그램을 엉망으로 만들었다. 실제로 그것은 execv 명령이다.execv()가 제대로 작동하지 않습니다.
void ls(char** array)
{
pid_t pid = fork();
if (pid == 0)
{
execv("./ls",array);
}
else
{
waitpid(pid,0,0);
}
}
void cp(char** array)
{
pid_t pid = fork();
if (pid == 0)
{
execv("./cp",array);
}
else
{
waitpid(pid,0,0);
}
}
void groups(char** array)
{
pid_t pid = fork();
if (pid == 0)
{
execv("./groups",array);
}
else
{
waitpid(pid,0,0);
}
}
int input()
{
char buffer[128];
char * str;
char * str1;
char * str2;
char * str3;
char *name;
int i = 0;
int num;
int words = 1;
name = getlogin();
printf("%s --->", name);
int result = scanf("%[^\n]",buffer);
getchar();
char **array;
if (result > 0)
{
for (int i = 0; buffer[i]!='\0'; i++)
{
if (buffer[i] == ' ' || buffer[i] == '\n' || buffer[i] == '\t')
{
words++;
}
}
array = malloc(words * sizeof(char*));
array[0] = strtok(buffer, " ");
for(int w = 1; w < words; w++)
{
array[w] = strtok(NULL, " ");
}
if (words == 1)
{
array[1] = '\0';
}
}
str = strstr(array[0], "ls");
str1 = strstr(array[0], "cp");
str2 = strstr(array[0], "groups");
str3 = strstr(array[0], "exit");
if (str != NULL)
{
ls(array);
free(array);
}
else if (str1 != NULL)
{
cp(array);
free(array);
}
else if (str2 != NULL)
{
groups(array);
free(array);
}
else if (str3 != NULL)
{
num = 0;
free(array);
return num;
}
else
{
printf("Incorrect command\n");
}
num = 1;
return num;
나는이 스 니펫이 좋을 것이라고 생각합니다. 내 코드가 execv에 올바르게 도착한다. 어떤 이유로 든 실행되지 않는다. ls 및 그룹은 잘 작동하지만 cp는 작동하지 않습니다. 내 기본 그냥 입력을 호출
당신이 오류 검사, 일부 디버그 출력을 추가하는 시도 해 봤나? 'array'에는 무엇이 있습니까? '효과가 없다'는 것은 무엇을 의미합니까? – pvg
'cp'가 현재 작업 디렉토리에 있는지 확인했습니다. –
예, cp가 올바른 디렉토리에 있습니다. 작동하지 않는 것은 cp 명령이 호출 될 때 아무 것도 출력하지 않는다는 것을 의미합니다. 기본적으로 사용자는 cp [file] [destination]을 입력 할 것입니다. 입력 할 때 아무 것도하지 않습니다. execv가 -1을 반환하면 제대로 실행되지 않았 음을 나타냅니다. –