Архив де тексто коррупции

Buenas tardes, estoy realisando una Practica para la universidad, программа, состоящая из нескольких частей, от начала и до конца, вилка creado mediante () представляет собой трудную тему, поданную в течение многих лет, el padre a Continación, введите el pid y un salto de linea en un archivo de texto.

В нем представлены все новые и новые текстовые статьи, представленные в порядке аргументации

.

Проблемы, связанные с этой программой, не могут быть исключены из списка возможных. Os dejo el código является продолжением. Грасиас де Антемано.

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <errno.h>

int main(int argc, char *argv[]){

 int pid, fd[2], estado;
 int buf[256];
 creat(argv[2], 7777);
 //printf("%d\n", f);

 pipe(fd);

 int nhijos = *argv[1] -'0';
 for(int i=0; i<nhijos; i++){
     switch(fork()){
     case 0:        //Hijo
        close (fd[0]);
        close (1);
        dup(fd[1]);
        close(fd[1]);
        pid = getpid();
        buf[1]= pid;
        write(1, buf, 2);
        write(1, "\n", 1);
        exit(0);
    case -1: 
        printf("fork");
    default:        //Padre
        close (fd[1]);
        close (0);
        dup(fd[0]);
        close(fd[0]);
        read(0, buf, 3);
        write(3, buf, 3);
        int err;
        err = wait(&estado);
    }
}
printf("Termino la ejecucion \n");
exit(0);
}
2
задан 18.01.2017, 20:21
0 ответов

Не тестируя твоего кода, я вижу, что ты делаешь

int buf[256];
. . .
write( 1, buf, 2 );
write( 1, "\n", 1 );

Делая это, write( ) он печатал бы бинарное представление числа, не символы (цифры), которые это формируют. Кроме того: откуда ты достаешь, что размер одного int он 2 ? В любом случае, он мог бы быть write( 1, buf, sizeof( int ) );.

Между различные возможные решения, я предлагаю тебе конвертировать этих int в caracteres, и печатать вышеупомянутые. Я показываю тебе функциональный пример, легкий для того, чтобы быть приспособленным к твоему коду:

#include <stdio.h>
#include <string.h>

int Number = 1024;
char string[15]; // Núm. arbitrario; caracteres máximos.
sprintf( string, "%d", Number ); // string[] = "1024\n";

write( 1, string, strlen( string ) );
write( 1, "\n", 1 );

Ты свободен это использовать, где ты хотел; или ты посылаешь правильные символы отцу, или посылаешь число, и что отец это преобразовал. На вкус потребителя.

2
ответ дан 03.12.2019, 17:38