使用管道作为流C

时间:2015-04-03 18:30:18

标签: c stream pipe

我第一次在这里寻求帮助。

我目前正在用C语言编写游戏,而网络部分我正在传输一个字符串。为了分析这个并返回打印在其中的不同int,我想使用一个流。由于我在C中找不到流,我使用的是#pipe;#39;和fdopen将其转换为文件流。

我最初是这样做的:

int main (){
    int fdes[2], nombre;
    if (pipe(fdes) <0){
        perror("Pipe creation");
    }
    FILE* readfs = fdopen(fdes[0], "r");
    FILE* writefs = fdopen(fdes[1], "a");
    fprintf(writefs, "10\n");
    fscanf(readfs, "%d", &nombre);
    printf("%d\n", nombre);
    return 0;
}

但它没有用。 一种功能性的方法是使用write而不是fprintf,这是有效的:

int main (){
    int fdes[2], nombre;
    if (pipe(fdes) <0){
        perror("Pipe creation");
    }
    FILE* readfs = fdopen(fdes[0], "r");
    write(fdes[1], "10\n", 3);
    fscanf(readfs, "%d", &nombre);
    printf("%d\n", nombre);
    return 0;
}

我找到了解决问题的方法,但我仍然想了解为什么第一个解决方案无效。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

它是由流缓冲引起的。在致电fflush(writefs);之后添加fprintf

 fprintf(writefs, "10\n");
 fflush(writefs);
 fscanf(readfs, "%d", &nombre);