Итак, я читаю команды из файла, у которого есть строка команд, каждая из которых разделена разделителем, который представляет собой полуплот. Я получил эти команды в массив, и я в основном выполняю их один за другим. Все работает нормально, пока у меня нет команды, у которой есть опция, и execvp
терпит неудачу, и я не знаю, как это исправить.execvp терпит неудачу, когда у команды есть опция
Вот мой код:
int main(int argc, char *argv[])
{
char delim[] = ";"; // the semicolon is the commands separator
FILE* batchFile;
char oneLine[512];
batchFile = fopen("myfile.txt", "r");
int numOfCommands = 0;
char *commands[100];
char *oneCommand;
pid_t childPid;
int child_status;
if(batchFile == NULL)
{
perror("Error opening file ... exiting !");
exit(1);
}
if(fgets(oneLine,512,batchFile) != NULL)
{
//puts(mystring);
fclose(batchFile);
}
printf("The command is: %s \n", oneLine);
oneCommand = strtok(oneLine,delim);
commands[numOfCommands++] = strdup(oneCommand);
while((oneCommand=strtok(NULL, delim))!=NULL)
{
commands[numOfCommands++] = strdup(oneCommand);
}
commands[numOfCommands] = NULL;
for(int i = 0;i < numOfCommands;i++)
{
printf("The command is: %s \n",commands[i]);
}
for(int i =0;i < numOfCommands;i++)
{
childPid = fork();
if(childPid == 0)
{
execvp(commands[i], argv);
perror("exec failure");
exit(1);
}
else
{
wait(&child_status);
}
}
return 1;
}
и некоторые команды, такие как выход, CD не будет работать, я думаю, может быть, потому что они не находятся в/бен ??
и как это можно исправить?
Мой файл имеет следующую строку
логинсервера; дата; Кэл PWD; CD; Ls -l;
и когда я запускаю свою программу, он выводит следующее.
Вы передаете 'argv':' execvp (команды [I], ARGV); '. Вероятно, вы хотели передать «команды». –
@ I3x Я изменил его, и у меня не было такого файла или каталога, который не найден для каждой отдельной команды. – Pro
Отправьте пример строки, для которой execvp терпит неудачу. Распечатайте команду и аргументы, которые вы передаете 'execvp' для проверки. –