Iam пытается создать код с 1 родителем и 2 детьми. Метод 3 параметра Получать: original_file word1 WORD2Кто-нибудь может помочь мне с моим кодом в c?
родитель читать файл построчно:
- Если линия пара, отправить строку в метод proccess_pair и word1. Если строка содержит слово 1, сохраните строки в файле_1.txt
- Если строка нечетна, отправьте строку в метод proccess_odd и слово2. Если строка содержит word1, сохранить строки в file_2.txt
начинающему Im в с, и я пытаюсь с этим:
int p_h1[2] // pipe from parent to child1
int p_h2[2];// pipe from parent to child2
int main(int argc, char **argv){
pid_t pdi1, pdi2;
FILE *fd; // for original file
FILE *p_h1f, *p_h2f; //file create for child1 and child2 respectively
char buffer[1024];//buffer
if (pid1<0){
fprintf(stderr,"Error fork \n %s \n",strerror(errno));
exit(EXIT_FAILURE);
}
else if (pid1==0){//Im the child1
//proccess for child 1
proccess_pair(arg[2]);
exit(EXIT_SUCCESS);
}
pid2 = fork();
if (pid2<0){
fprintf(stderr,"Error fork \n %s \n",strerror(errno));
exit(EXIT_FAILURE);
}
else if (pid2==0){//Im the child2
//proccess for child 2
proccess_odd(arg[2]);
exit(EXIT_SUCCESS);
}
//Parent dont read from pipe
close(p_h1[0]);
close(p_h2[0]);
fd = fopen(argv[1],"r"); //I openthe file for read it;
p_h1f = fdopen(p_h1[1],"w")
p_h2f = fdopen(p_h2[1],"w")
int i = 1;
while(fgets(buffer,1024,fd) != NULL){
if (i % 2 ==0){ //check if the lines is pairs
fputs(buffer,p_h1f);
fflush(p_h1f);
}else{
fputs(buffer,p_h2f);
fflush(p_h2f);
}
i++;
}
close(p_h1[1]);
close(p_h2[1]);
fclose(fd);
wait(NULL);
wait(NULL);
}
Оба метода (для chil1 и chil2) будет то же самое (но закрытие правильных сторон труб), по этой причине я только реализовать один из них:
void proccess_pair(char *word1){
FILE *fd;
fd = fopen("file_1.txt","w");
//closing the not used
close(p_h1[1]);
close(p_h2[1]);
close(p_h2[0]);
int nsto = dup(1)//duplicate the stdout
dup2(fd,1);//changing stdout->file_1.txt
execlp("grep","grep",word1,NULL);//execution of grep
exit(EXIT_SUCCESS);
}
Im обучение и я знаю, что у меня есть много много ошибки, поэтому мне нужна помощь.
С уважением
Если вы знаете, как использовать трубку с одним ребенком, попробуйте написать что-нибудь для двух детей и отправьте код. –
@ Jean-BaptisteYunès отредактирован! спасибо ejeje – randall