2017-05-15 3 views
-1

Code Source:Comment écrire des tableaux entiers dans un tube et comment en lire le premier?

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


int main(){ 
    int fd1[2]; 
    int sample[] = {1,2,3,4}; 
    int input[] ={5 , 6, 7,8}; 
    pid_t p; 

    if (pipe(fd1)==-1)return 1; 
    if (pipe(fd2)==-1) return 1; 

    write(fd1[1], input, sizeof(input)+1); 
    write(fd1[1], sample, sizeof(sample)+1); 
    close(fd1[1]); 
    char concat[100]; 
    read(fd1[0],concat,100); 
    int i=0; 
    for(i;i<sizeof(concat);i++){ 
      printf("%i ",concat[i]); 

} 
     printf("\n"); 

} 

Je veux écrire des tableaux dans le tuyau, et après que je veux lire le premier tableau, et non la conduite tout ou pas comme dans le code:

read(fd1[0],concat,100); 

Est-ce possible? Si ce n'est pas, je vais utiliser des structures.

+4

Veuillez formater votre code pour qu'il soit lisible. –

+0

Vous devez écrire tout le tableau dans le tube. Mais pourquoi voulez-vous utiliser un tuyau pour cela? S'il vous plaît lire ceci: [Le problème XY] (http://xyproblem.info/). –

+0

vous semblez avoir réussi à écrire du code qui va écrire/lire un int? le répéter pour un tableau est juste une extension de celui utilisant une boucle. –

Répondre

1

Concaténation de deux tableaux de int via un tube.

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


int main() 
{ 
    int fd1[2]; 
    int fd2[2]; 

    int sample[] = {1,2,3,4}; 
    int input[] ={5 , 6, 7,8}; 
    pid_t p; 

    if (pipe(fd1)==-1)return 1; 
    if (pipe(fd2)==-1) return 1; 

    p = fork(); 

    if (p < 0) return 1; 

    // Parent process 
    else if (p > 0) 
    { 
     int concat[100]; 
     close(fd1[0]); 
     write(fd1[1], input, sizeof(input)+1); 
     close(fd1[1]); 

     wait(NULL); 

     close(fd2[1]); 
     read(fd2[0], concat, 100); 

     printf(" %i", concat[0]); 
     printf(" %i", concat[1]); 
     printf(" %i", concat[2]); 
     printf(" %i", concat[3]); 

     close(fd2[0]); 
    } 

    // child process 
    else 
    { 
     close(fd1[1]); 
     char concat[100]; 
     read(fd1[0], concat, 100); 
     int k = sizeof(concat); 
     int i; 
     for (i=0; i<sizeof(sample); i++) 
      concat[k++] = sample[i]; 

     concat[k] = '\0'; 

     close(fd1[0]); 
     close(fd2[0]); 

     write(fd2[1], concat, sizeof(concat)+1); 
     close(fd2[1]); 
     exit(0); 
    } 
} 
+0

Merci pour votre aide, c'était de ma faute, j'étais inexacte la dernière fois, j'ai modifié la question maintenant. Pouvez-vous m'aider à résoudre ce problème? – zarnilord