微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在bash中重定向C程序输出时出现问题

我用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] 举报,一经查实,本站将立刻删除。

相关推荐