当前位置: 技术问答>linux和unix
[新手报道]:Linux下怎么用printf无法将信息打印出来?
来源: 互联网 发布时间:2016-05-11
本文导语: 先简单介绍一下我使用的平台: 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 reco...
先简单介绍一下我使用的平台: 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.
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 看看吧!
比如你有输出打印的执行程序 test,在命令行执行 ./test > log.txt 那么所有的输出信息都重定向到文件log.txt中了。标准输出就看不到打印了。
具体到编程,看你程序中是不是调用了dup2()函数。比如dup2(fd3, STDOUT_FILENO)就将标准输出重定向到fd3代表的文件中了。而STDOUT_FILENO被关闭掉。所以无法在标准输出看到打印信息。
man dup/dup2 看看吧!
|
在printf之后调用fflush(stdout);试下
另外,只有就这里不能打印?? 程序其他地方可以打印么?
另外,只有就这里不能打印?? 程序其他地方可以打印么?
|
可能是你运行是输出转向了。
|
1,看看是否重定向了;
2,输出是有缓冲的,加一个换行符n看看。
2,输出是有缓冲的,加一个换行符n看看。
|
你没有说清楚你的打印代码和do_cgi是什么关系。
可以在程序开头复制STDOUT_FILENO,写一个自己的输出函数,函数内用write来输出到复制的描述符去。
可以在程序开头复制STDOUT_FILENO,写一个自己的输出函数,函数内用write来输出到复制的描述符去。
|
你要加一个n,就可以显示出来了。
|
不知道为什么,平时我用的时候都是可以的
|
楼主的程序是以后台运行吗?
|
|
16楼正解。
自己写一个log输出函数,用自己保留的文件id来进行标准输出。
自己写一个log输出函数,用自己保留的文件id来进行标准输出。
|