我有关于与管道沟通的功课。我有4个程序
main.c是父母,其他人是孩子。我可以运行prog1.c并与main.c中的管道进行通信。在prog2.c中,我从管道中读取文件名并使用open()但在open()之后prog2.c不起作用。
MAIN.C
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char *argv[], char ** envp){
int pipefd[2];
int pipes=pipe(pipefd);
if(pipes< 0){
perror("pipe hata");
exit(1);
}
int i;
int f;
f= fork();
if(f==0){
i= execv("prog1",NULL);
close(pipefd[1]);
}
else{
wait(&i);
}
f= fork();
int j;
if(f== 0){
j=execv("prog2", NULL);
close(pipefd[1]);
}
else{
wait(&j);
}
f= fork();
int z;
if(f== 0){
z=execv("prog3", NULL);
close(pipefd[1]);
}
else{
wait(&z);
}
return 0;
}
prog2.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
int main(int argc, char *argv[], char ** envp){
printf("Prog2.c desin\n");
int pipefd[2];
char temp[1];
printf("karakteri giriniz:");
gets(temp);
char *p = strchr(temp, '\n');
if (p) *p = 0;
char dosya[30];
read(3, dosya,30);
printf("Okunan: %s\n", dosya);
char *dosyaIsmi;
printf("Dosya Ismi:");
scanf("%s",dosyaIsmi);
printf("Dosya ismi(kullanıcıdan): %s\n", dosyaIsmi);
const char *bosluk=" ";
char newargv[32];
char okunan[1];
int fd=open(dosya, O_RDONLY, 0644);
printf("fd\n");
int fd3=open(dosyaIsmi, O_CREAT | O_WRONLY | O_TRUNC | O_APPEND, 0644);
printf("fd3");
int w=read(fd, okunan, 1);
int byte=0;
while(w> 0){
printf("while\n");
if(okunan[0]==' '){
printf("if\n");
lseek(fd,byte,SEEK_SET);
write(fd3, temp, 1);
}
else if(okunan[0]!=' '){
printf("else if\n");
write(fd3, okunan, 1);
}
byte++;
w= read(fd, okunan, 1);
}
close(fd);
close(fd3);
write(4, dosya, 50);
return(0);
}