Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 同时写入两个流大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

有没有办法将两个流(或文件描述符)连接在一起,以便写入一个流也将写入第二个流? (C,LinuX)谢谢.最佳答案用户laalto是正确的,但在Linux上,您正在寻找的功能称为fopencookie.纠正laalto的Linux示例导致:int my_writefn(void *cookie, const char *data, int n) { FIL
@H_419_0@

有没有办法将两个流(或文件描述符)连接在一起,以便写入一个流也将写入第二个流? (C,Linux)

谢谢.

最佳答案
用户laalto是正确的,但在Linux上,您正在寻找的功能称为fopencookie.纠正laalto的Linux示例导致:

int my_writefn(void *cookie,const char *data,int n) {
  FILE **files = (FILE **)cookie;
  fwrite(data,n,1,files[0]);
  return fwrite(data,files[1]);
}

int noop(void) { return 0; }
cookie_io_functions_t my_fns = {
  (void*) noop,(void*) my_writefn,(void*) noop,(void*) noop
};

FILE *files[2] = ...;

FILE *f = fopencookie((void *)files,"w",my_fns);

// ... use f as you like ...

当您写入f时,系统将执行my_writefn函数,并将传递给fwrite的数据传递给它.为了简化操作,您可能还希望将文件流的缓冲更改为面向行:

setvbuf(f,NULL,_IOLBF,0);

这将缓冲传递给fwrite的数据,直到输出换行或从连接到进程的任何流(例如stdin)读取任何数据.注意:您必须在fopencookie之后但在将任何数据写入流之前调用sevbuf.

我使用行缓冲,因为我通常使用fopencookie将stderr重定向到syslog,或通过网络套接字,并且处理面向行的数据更容易,更有效.

大佬总结

以上是大佬教程为你收集整理的c – 同时写入两个流全部内容,希望文章能够帮你解决c – 同时写入两个流所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。