我用C编写了一个程序,它使用printf将消息发送到stdout,我无法将输出重定向到一个文件(从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 Domain套接字
>它使用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);
}
解决方法:
换行后的刷新仅在打印到终端时有效,但在打印到文件时不一定. Google快速搜索在此页面中显示了更多信息:http://www.pixelbeat.org/programming/stdio_buffering/
毕竟,你可能不得不为fflush(stdout)添加一些调用.
您还可以使用setvbuf设置缓冲区大小和行为.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。