使用管道作为流C

  • 本文关键字:管道 c stream pipe
  • 更新时间 :
  • 英文 :


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

我目前正在用C编写一个游戏,对于网络部分,我正在传输一个字符串。为了分析这一点并返回打印在其中的不同int,我想使用流。由于我在C中没有发现流,所以我使用"pipe"和fdopen将其转换为File流。

一开始我是这样做的:

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, "10n");
    fscanf(readfs, "%d", &nombre);
    printf("%dn", 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], "10n", 3);
    fscanf(readfs, "%d", &nombre);
    printf("%dn", nombre);
    return 0;
}

我找到了解决问题的方法,但我仍然想明白为什么第一个解决方案不起作用。知道吗?

这是由流缓冲引起的。在对fprintf的调用之后添加fflush(writefs);

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

相关内容

  • 没有找到相关文章

最新更新