Я хочу перенаправить stdout и stdin в определенный файл, который будет указан в массиве argv.Как перенаправить stdout и stdin в заданный файл с помощью argv в C
Например, когда я вхожу в команду, как - ./shell Ls> Тест
он должен быть перенаправлен в файл «тест», теперь я немного путаю, потому что без написания кода автоматически перенаправляет на этот файл , Я хочу сделать это вручную, во-вторых, когда я вхожу в команду like- ./shell ls < test, stdin следует перенаправить. Я попытался найти имя файла и знак «>» или «<», используя argv [argc-1] и argv [argc-2], но кажется, что когда я использую «>» и имя файла впоследствии, вывод печатает (аргументы перед «>» «<» в этом файле вместо того, чтобы получать это имя и знак.
В принципе, я создаю команду оболочки с помощью execvp() и fork().
Вот мой код, я могу перенаправить stdout в статическом файле.
void call_system(char *argv[],int argc)
{
int pid;
int status=0;
signal(SIGCHLD, SIG_IGN);
int background;
/*two process are created*/
pid=fork();
background = 0;
if(pid<0)
{
fprintf(stderr,"unsuccessful fork /n");
exit(EXIT_SUCCESS);
}
else if(pid==0)
{
//system(argv[1]);
/*argument will be executed*/
freopen("CON","w",stdout);
char *bname;
char *path2 = strdup(*argv);
bname = basename(path2);
execvp(bname, argv);
fclose (stdout);
}
else if(pid>0)
{
/*it will wait untill the child process doesn't finish*/
//waitpid(pid,&status,0);
wait(&status);
//int tempid;
//tempid=waitpid(pid,&status,WNOHANG);
//while(tempid!= pid);// no blocking wait
if(!WIFEXITED(status) || WEXITSTATUS(status))
printf("error");
exit(EXIT_SUCCESS);
}
}
Просто используйте что-то другое, кроме '>' и '<', например './myprog -i input.file -o output.file'. –