2016-03-21 9 views
-1

Ich habe Probleme beim Schreiben und Lesen von einer Pipe. Ich muss ein Array von Primzahlen erstellen und dieses Array in eine Pipe schreiben, um dieses Array von der Pipe zu lesen. Ich habe mehrere verschiedene Wege ausprobiert, kann es aber nicht herausfinden.Schreiben eines Arrays von Ints zu Rohr

Hier ist mein Code.

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <stdlib.h> 
#include <string> 
#include <iostream> 
#include <sstream> 
#include <string.h> 
using namespace std; 

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

int n = 10000; 
int array[n] = {0}; 
int nums[n] = {0}; 
int k = 0; 
int answer[argc] = {0}; 

//this loop makes an array or prime numbers acording to the node 
//if that node number is not a prime number it puts a 0 in that node 
for(int i =2; i < n; i++){ 
    for(int j = (i*i); j < n; j+=i){ 
     array[j-1] = 1; 
    } 
} 
//this loop makes an array of all the prime numbers; 
for(int i = 1; i < n; i++){ 
    if(array[i -1] == 0){ 
     nums[k] = i; 
     k++; 
    } 
} 
//this loop puts the selected prime numbers in the array 
for(int j = 1; j < argc; j++){ 
    int num = atoi(argv[j]); 
    answer[j - 1] = nums[num]; 
} 
//this loop prints the primes for testing 
for(int i = 1; i < argc; i++) 
    cout << answer[i - 1] << endl; 


int fd[2], nbytes; 
pid_t childpid; 
string number; 
int readbuffer[90]; 
string numbers; 
pipe(fd); 

if((childpid = fork()) == -1){ 
    perror("fork"); 
    exit(1); 
} 

if(childpid == 0){ 

    close(fd[0]); 
    for(int i = 0; i < argc; i ++){ 

    write(fd[1], &answer[i], sizeof(int)); 
    } 
    exit(0); 
} 

else{ 
    close(fd[1]); 
    for(int i = 0; i < argc; i++){ 
     nbytes = read(fd[0], readbuffer, sizeof(int)); 
     printf("recieved string: %s", readbuffer); 
    } 
} 

}

+0

Hinweis: die letzten zwei 'for' Schleifen sollten' i user3386109

Antwort

1

Sie schreiben Byte-Codierung von int-Werten

write(fd[1], &answer[i], sizeof(int)) 

sie

nbytes = read(fd[0], readbuffer, sizeof(int)) 

richtig

lesen, sondern versuchen, sie als C-Strings drucken

printf("recieved string: %s", readbuffer) 

Ihr Compiler sollte sich hier über einen falschen Typ beschweren. Ersetzen durch

printf("...%d\n",*readbuffer); 

Beachten Sie, dass Sie C-Streams verwenden, während Ihr Code C++ ist. Es wird besser sein, C++ - Streams zu verwenden ...

Verwandte Themen