- 方法1:
- #include
- #include
- #include
- #include
- #include
-
-
- int main()
- {
- fflush(stdout);
- setvbuf(stdout,NULL,_IONBF,0);
- printf("test stdout
");
- int save_fd = dup(STDOUT_FILENO);
- int fd = open("test1.txt",(O_RDWR | O_CREAT), 0644);
- dup2(fd,STDOUT_FILENO);
- printf("test file
");
-
-
-
-
-
-
- int ttyfd = open("/dev/tty",(O_RDWR), 0644);
- dup2(ttyfd,STDOUT_FILENO);
- printf("test tty
");
- }
-
- 方法2:
- #include
- #include
- #include
-
- int main()
- {
- fflush(stdout);
- setvbuf(stdout,NULL,_IONBF,0);
- printf("test stdout
");
- freopen("test1.txt","w",stdout);
- printf("test file
");
- freopen("/dev/tty","w",stdout);
- printf("test tty
");
- }
[cpp]
view plain
copy
- 到这里我们就可以轻松解决 prinft 不输出到屏幕的问题了.
-
-
- 不外乎两种情况.
- 第1 标准输出被重定向了.
- 第2 输出缓冲区的问题. 就是 我们上两例中 开头的两行代码了.
- fflush(stdout);
- setvbuf(stdout,NULL,_IONBF,0);
- 这两个函数都是有关流缓冲区的. 具体使用和说明网上有很多. 我只说一下什么是流缓冲区, 是做什么用的. 操作系统为减少 IO操作 所以设置了缓冲区. 等缓冲区满了再去操作IO. 这样是为了提高效率.
找到当前设备使用的那个串口终端的的方法:
可以通过uboot启动参数setenv bootargs mem=700M console=ttyAMA0,115200root=/dev/ram0
可以看到,console设备为ttyAMA0,
测试可以telnet到设备,echo “hello world” > /dev/ttyAMA0 查看串口是否有打印