C Read from File всегда будет читать 0 байтов - PullRequest
0 голосов
/ 24 января 2020

У меня возникла проблема, когда я хочу читать из файла, используя функцию чтения, но я не могу. Мой код делает это. У меня есть родительский процесс и дочерний процесс. Ребенок выполняет команду exe c, и я перенаправил стандартный вывод в файл f. Родитель ожидает дочернего элемента и после этого считывает содержимое файла и сохраняет его в буфере. Затем я отправляю этот вывод клиенту через сокет, используя send, но это не проблема. Проблема в том, что, хотя txt имеет содержимое внутри команды exe c, функция чтения ничего не читает, и из моего тестирования она всегда читает 0 байтов.

                 //parent

                    if (wait(&status2)== -1){ // Wait for child
                        perror("wait");
                    }

                    check_child_exit(status2);

                    n = read(f, buffer, MAX_BUFF-1);
                    if (n < 0){
                        error("ERROR reading from File");
                    }    
                    printf("\n%d\n",n);

                    n = send(newsockfd,buffer, MAX_BUFF-1,0);
                    if (n < 0){
                        perror("ERROR writing to socket");
                        break;
                    }


               //child
                     dup2(f,1);
                     dup2(f,2);
                        .
                        .
                        .

                     execvp(words[0],words); // Execute date
                     perror("execvp");
                     exit(EXIT_FAILURE)

Итак, как вы можете видеть это 2 процесса. Я слышал из другой статьи, что проблема может быть в открытии файла. Но я не уверен, какие варианты использовать или нет. Я даже пытался открыть с помощью функции open и fopen, просто чтобы попробовать что-то новое. Вот открытые и открытые звонки:

        f = open("temp133",O_RDWR|O_CREAT|O_TRUNC,0755);
        if (f==-1){
            error_exit("Error Exit");

        }

        FILE *fd=fopen("tmp","w+");

заранее спасибо

...