gpt4 book ai didi

c - 在 bash 中重定向 C 程序输出的问题

转载 作者:IT王子 更新时间:2023-10-29 00:09:02 25 4
gpt4 key购买 nike

我用 C 编写了一个程序,它使用 printf 将消息发送到标准输出,但我无法将输出重定向到文件(从 bash 运行)。

我试过:

./program argument >> program.out
./program argument > program.out
./program >> program.out argument
./program > program.out argument

在每种情况下,都会创建文件 program.out,但它仍然是空的。执行结束后文件大小为0。

如果我在执行程序时省略了重定向:

./program argument

然后,所有使用 printf 发送到 stdout 的消息都会显示在终端中。

我有其他 C 程序,我可以用这种方式重定向输出。跟程序本身有关系吗?随着论证通过?应该从哪里找问题?

关于C程序的一些细节:

  • 它不从标准输入读取任何内容
  • 它使用 BSD Internet 域套接字
  • 它使用 POSIX 线程
  • 它使用 sigaction 为 SIGINT 信号分配一个特殊的处理函数
  • 它向 stdout 发送大量换行符(对于那些认为我应该刷新的人)

部分代码:

int main(int argc, char** argv)
{
printf("Execution started\n");
do
{
/* lots of printf here */
} while (1);
/* Code never reached */
pthread_exit(EXIT_SUCCESS);
}

最佳答案

换行后刷新仅在打印到终端时有效,但在打印到文件时不一定有效。快速的谷歌搜索显示了包含更多信息的此页面:http://www.pixelbeat.org/programming/stdio_buffering/

请参阅标题为“默认缓冲模式”的部分。

毕竟,您可能必须添加一些对 fflush(stdout) 的调用。

您还可以使用 setvbuf 设置缓冲区大小和行为.

关于c - 在 bash 中重定向 C 程序输出的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com