【问题标题】:Writing an array of ints to pipe将整数数组写入管道
【发布时间】:2016-03-21 20:38:25
【问题描述】:

我在尝试从管道写入和读取时遇到问题。我必须创建一个素数数组并将该数组写入管道以从管道中读取该数组。我尝试了多种不同的方法,但无法弄清楚。

这是我的代码。

#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);
    }
}

}

【问题讨论】:

  • 注意:最后两个for 循环应该有i &lt; argc-1。例如,如果argc 为 2,则answer 数组中只有一个答案。

标签: c++ arrays pipe


【解决方案1】:

您编写 int 值的字节编码

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

正确阅读它们

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

但尝试将它们打印为 C 字符串

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

你的编译器应该在这里抱怨错误的类型。替换为

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

请注意,当您的代码是 C++ 时,您正在使用 C 流。使用 C++-streams 会更好...

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多