linux中程序printf输出到文件,[新手报道]:Linux下怎么用printf无法将信息打印出来?...

先简单介绍一下我使用的平台: ARM9,Arm-Linux-kernel 2.4.19,超级终端(COM1).

printf("FController:adding control client on fd %dn", client_sockfd);

printf("FFly Record Starting!!n");

system("ffly record start");

///

明明知道这段代码已经被执行了,因为ARM已经将录象的文件保存到了SD卡中,但为何超级终端上无法打印出调试信息呢? 这段代码节选自FController.c(有关网络数据的接收及命令解析线程代码). 不会是要将 printf 调试信息打印出来,还要 GCC 带一个特定参数进行编译吧? 还是因为在网络数据接收的线程里,没办法打印出信息??

小弟,刚接触嵌入Linux编程,对ARM-LINUX下的程序调试很陌生! 这个问题已经困绕我好几天了.

请各位前辈帮帮忙啊!thanks.

|

输出转向就是你把标准输出(stdout)重定向到了其他文件描述符!

比如你有输出打印的执行程序 test,在命令行执行 ./test > log.txt  那么所有的输出信息都重定向到文件log.txt中了。标准输出就看不到打印了。

具体到编程,看你程序中是不是调用了dup2()函数。比如dup2(fd3, STDOUT_FILENO)就将标准输出重定向到fd3代表的文件中了。而STDOUT_FILENO被关闭掉。所以无法在标准输出看到打印信息。

man dup/dup2  看看吧!

|

在printf之后调用fflush(stdout);试下

另外,只有就这里不能打印?? 程序其他地方可以打印么?

|

可能是你运行是输出转向了。

|

1,看看是否重定向了;

2,输出是有缓冲的,加一个换行符n看看。

|

你没有说清楚你的打印代码和do_cgi是什么关系。

可以在程序开头复制STDOUT_FILENO,写一个自己的输出函数,函数内用write来输出到复制的描述符去。

|

你要加一个n,就可以显示出来了。

|

不知道为什么,平时我用的时候都是可以的

|

楼主的程序是以后台运行吗?

|

|

16楼正解。

自己写一个log输出函数,用自己保留的文件id来进行标准输出。

|

你可能感兴趣的:(linux中程序printf输出到文件,[新手报道]:Linux下怎么用printf无法将信息打印出来?...)