2015-05-18 4 views
0

У меня есть проблема с отправкой целого числа или массива целого числа через трубу н Linux, сначала я пытался отправить целое число, посмотрите на этом коде:Передача целого через трубу

#include <unistd.h> 
#include<iostream> 
#include<cstdlib> 
#include <sys/types.h> 
#include <sys/wait.h> 
using namespace std; 

int main() 
{ 

    int count = 10 ; 
    //cout <<"Enter a digit : "; 
    //cin >> count ; 
    cout<<"\n"; 

    int pfd1[1]; 
    pipe(pfd1);  

    int a=fork(); 
    if(a==0) 
    {  
     close(pfd1[0]); 
     write(pfd1[1],&count,sizeof(count)); 
     close(pfd1[1]); 
     exit(0); 
    } 
    else 
    { 
     wait(NULL); 
     int n =0; 
     close(pfd1[1]);  
     read(pfd1[0],&n ,sizeof(n)); 
     close(pfd1[0]); 
     cout <<"N from parent = "<<n<<"\n\n"; 
    } 
    return 0; 
} 

Выход:

N from parent = 4 

выход должен быть 10 же, как один объявлен, но это дает мне 4, и даже если я не-комментарий комментарий код, чтобы пользователь введите номер, выход всегда 4, в то время как это должно быть число который пользователь ввел.

Что здесь не так? И что, если я хочу отправить массив целых чисел?

+0

Почему вы пренебрегая 'читать()' и 'записи()' возвращает значение? –

+0

, потому что я не знаю, что с ними делать, я все еще изучаю Linux. –

+1

do 'man read',' man write' в ** терминал **, он отобразит, что означает возвращаемое значение – sam

ответ

2

Вы выходите за пределы массива, вы должны объявить pfd1 как

int pfd1[2]; 
+0

Я потратил один час, пытаясь понять, что не так, thx mate решил! –

+0

Что делать, если я хочу отправить массив целых чисел? возможно ли это через трубу? –

+0

@ М.Шерин уверен, напишите все, что хотите, с одного конца и прочитайте его с другого конца. –

Смежные вопросы