В классе мне был назначен проект для написания кода для создания трех дочерних элементов и выдачи pid с помощью оператора switch. Моя проблема в том, что я не знаю, как заставить мой оператор switch принимать значение из моего цикла, который создает дочерние элементы и делать то, что находится внутри переключателя.
int main (){
int i;
pid_t childpid;
//first child
char *my_codeOne = "ls";
char *my_argvOne[] = {"ls", "-1", NULL};
//second child
char *my_codeTwo = "ps";
char *my_argvTwo[] = {"ps", NULL};
//third child
char *my_codeThree = "/bin/sh";
char *my_argvThree[] = {"/bin/sh", "-c", "echo $PATH", NULL};
for(i = 0; i < 3; i++){
childpid = fork();
if((childpid = fork()) == -1){
printf("Error");
}else if ((childpid = fork()) == 0){
break;
}
}
//make switch statement feed from loop
//use execvp (vector or array of param) p = the current path environment
//variable
switch(i) {
case 0:
execvp (my_codeOne, my_argvOne);
printf("%ld", (long)childpid);
break;
case 1:
execvp (my_codeTwo, my_argvTwo);
printf("%ld", (long)childpid);
break;
case 2:
execvp (my_codeThree, my_argvThree);
printf("%ld", (long)childpid);
break;
default:
break;
}
Также я вполне уверен, что мой циклделает больше детей, чем это должно быть. Любая помощь полезна, спасибо!
РЕДАКТИРОВАТЬ: я использую xcode, и я получаю уведомление о точке останова, как только появляется мой оператор switch.
РЕДАКТИРОВАТЬ: Это мое обновлениекод и вывод. Он все равно не будет печатать pid, так как же заставить его печатать pid?
for(i = 0; i < 3; i++){
childpid = fork();
//removed fork from if statement
if(childpid == -1){
printf("Error");
}else if (childpid == 0){
break;
}
}
//printf("Exited");
//make switch statement feed from loop
//use execvp (vector or array of param) p = the current path environment variable
switch(i) {//removed breakpoint notifications so this would go through
case 0:
execvp (my_codeOne, my_argvOne);
printf("%ld\n", (long)childpid);
break;
case 1:
execvp (my_codeTwo, my_argvTwo);
printf("%ld\n", (long)childpid);
break;
case 2:
execvp (my_codeThree, my_argvThree);
printf("%ld\n", (long)childpid);
break;
default:
break;
}
Вывод:
ClassProject PID TTY TIME CMD /Applications/Xcode.app/Contents/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin Программа завершилась с кодом выхода: 0