系统调用打开错误

时间:2016-12-15 15:54:24

标签: c pipe fork system-calls

我有关于与管道沟通的功课。我有4个程序

  1. 的main.c
  2. prog1.c
  3. prog2.c
  4. prog3.c
  5. 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);
    }
    

0 个答案:

没有答案