Я использую execvp для выполнения unix команд, записанных в текстовом файле. Ниже приведен код, который я написал, но он не работает.
Я читаю строки из файла, и каждая строка содержит команду unix (mv, cp et c).
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include <unistd.h>
int main ( int argc, char *argv[] )
{ pid_t pid;
pid_t child_pid;
int child_status;
char *token;
FILE *fp;
fp = fopen(argv[1],"r");
int i,j,ctr,rc_wait;
if( fp == NULL){
perror("An error has occurred\n");
exit(1);
}
char buff[100];
while(fgets(buff, sizeof(buff), fp)){
child_pid=fork();
if(child_pid<0){
printf("\nfork failed, error");
exit(0);
}
else if(child_pid==0){
//printf("\nString value = %s", buff);
token = strtok(buff, " \t");
execvp(token,buff);
}
else{
rc_wait = wait(NULL);
continue;
}
}
}
return 0;
}
входной файл был предоставлен в качестве аргумента для программы, и входные данные приведены ниже в качестве примера:
cp temp1/f1.txt temp2/
mv temp1/f2.c temp2/
cp temp1/f3.txt temp2/
cp temp1/f4.txt temp2/
cp temp1/f5.txt temp2/
cp temp1/f6.txt temp2/
mv temp1/f7.c temp1/f8.c
mv temp1/f9.c temp2/
cp temp1/f1.txt temp1/f1a.txt