Очевидно домашнее задание, однако я не прошу, чтобы кто-нибудь сделал это для меня, а просто хочу направление. До сих пор я уже писал это как дерево процессов форка (что было непросто выяснить)
/* Includes */
#include <unistd.h> /* Symbolic Constants */
#include <stdio.h> /* Input/Output */
#include <stdlib.h> /* General Utilities */
#include<errno.h>
int main()
{
pid_t leftchild;
pid_t rightchild;
pid_t pid;
int level=0;
int max;
printf("Enter in max level for process tree: ");
scanf(" %d", &max);
pid=getpid();
fprintf(stderr,"I am the parent process with and id of: %ld\n", (long)getpid());
for(; level<max; level++){
leftchild=fork();
if (leftchild == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(EXIT_FAILURE);
}
if(leftchild==0){
fprintf(stderr,"Level is %d, i am %ld , my parent is %ld\n",level, (long)getpid(), (long)getppid());
continue;
}
else{
rightchild=fork();
if(rightchild==0){
fprintf(stderr,"Level is %d, i am %ld , my parent is %ld\n",level, (long)getpid(), (long)getppid());
continue;
}
}
wait(NULL);
wait(NULL);
break;
}
}
эта программа создает это дерево
i
/\
i i
/\ /\
i i i i
Мне нужно создать другое дерево ветвлений, в котором есть такое дерево:
i
/ \
i i
/\
i i
/\
i i
/\
i i
Какую модификацию я должен рассмотреть, чтобы внести в мою программу?
Я попытался создать еще один форк внутри оператора правой руки, и это не сработало. Я даже пытался все расколоть, но это с треском провалилось. Я просто не вижу решения логически. какие-либо советы или предложения?
Я пробовал рекурсию:
/* Includes */
#include <unistd.h> /* Symbolic Constants */
#include <stdio.h> /* Input/Output */
#include <stdlib.h> /* General Utilities */
#include<errno.h>
pid_t leftchild;
pid_t rightchild;
pid_t pid;
int level=0;
int max;
void recurse(){
if(level<2){
leftchild= fork();
if (leftchild == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(EXIT_FAILURE);
}
if(leftchild==0){
fprintf(stderr,"Level is %d, i am %ld , my parent is %ld\n",level, (long)getpid(), (long)getppid());
}
rightchild=fork();
if (rightchild == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(EXIT_FAILURE);
}
if(rightchild==0){
fprintf(stderr,"Level is %d, i am %ld , my parent is %ld\n",level, (long)getpid(), (long)getppid());
}
level++;
recurse();
}
}
int main()
{
printf("Enter in max level for process tree: ");
scanf(" %d", &max);
pid=getpid();
fprintf(stderr,"I am the parent process with and id of: %ld\n", (long)getpid());
recurse();
}
Это на самом деле не вернет pid для чего-либо, по какой-то конкретной причине, почему?