【问题标题】:Writing to file from stdout从标准输出写入文件
【发布时间】:2025-11-29 10:55:01
【问题描述】:

我正在创建一个 EXE,它与标准输入和标准输出流一起使用。

我的可执行文件的输出正在将一些压缩数据写入标准输出流。

  int fd = fileno(stdout);
  _setmode(fd, O_BINARY);
  n = write(fd, buffer, nbytes);

但是当我将那些写入标准输出流的数据重定向到文件时(使用 my_exe get_data > File.txt ),文件中的数据长度将不匹配原始数据。如果我有 100 个字符的数据,那么在文件中,我看到 106 个字符的数据。我认为文件中添加了一些换行符或回车符。我已将标准输出设置为二进制流。但是在重新定向到文件时,同样的情况正在发生。有什么办法可以解决这个问题。

【问题讨论】:

  • 你能在十六进制编辑器中检查生成的文件吗?
  • 您能说明buffernbytes 是如何定义和分配的吗?
  • 您是否希望压缩输出比输入?它并不总是在小数据样本上。
  • 您有一个可以比较结果的好文件示例吗?
  • 您是说使用write_write 得到不同的结果吗?这听起来不太可能。在库中,write 的符号只是 _write 的别名符号。从字面上看,它们之间没有区别。 fileno_fileno 也是如此。

标签: c file newline msvcrt


【解决方案1】:

您正在使用 _setmode 一个 MS Visual C++ 函数来替换已弃用的 setmode。然而,您正在使用已弃用的 filenowrite

请使用_fileno_write

【讨论】:

  • 除了弃用警告之外,调用write 和调用_write 没有区别。在库中,write 符号只是_write 的别名。 fileno_fileno 也是如此。
  • 我希望它没有。
  • @JamesMcNellis 为什么 OP 会说它有,但它没有?我将其发布为对 cme​​ts 的回应。