Делаю базовую оболочку, работает нормально, но есть одна проблема. В настоящее время, если я предоставляю аргументы, такие как
cat testtextfile
команда execvp работает нормально. Однако, если я предоставлю что-то вроде
cat hello\ world
т.е. файл с пробелом в имени, команда не сработает. Как заставить execvp понимать аргументы такого рода.
Ниже приведен фрагмент моего кода, который работает, если я изменю args3[1] на что-то вроде «-n»:
char *args3[3];
args3[0] = "cat";
args3[1] = "hello\\ world";
args3[2] = NULL;
if ((child = fork()) == 0) { //child
printf("pid of child = %ld\n", (long) getpid());
execvp(args3[0], args3); //arg[0] is the command
fprintf(stderr, "execvp failed \n");
exit(1);
} else { //parent
if (child == (pid_t)(-1)) {
fprintf(stderr, "fork failed.\n"); exit(1);
} else {
if (doNotWait == 0){
c = wait(&cstatus); //wait for child
printf("child %ld exited with status = %d\n",
(long) c, cstatus);
} else {
printf("not waiting for child process\n");
}
}
}
return 0;