boa服务器打印功能

本文介绍了如何在嵌入式服务器BOA移植后恢复printf函数的使用。通过修改源码中对STDOUT_FILENO的重定向,将原来指向/dev/null的输出恢复,允许在代码任意位置使用printf进行调试输出。关键步骤包括保存原始STDOUT_FILENO,然后用devnullfd替换,最后再恢复原始输出。
摘要由CSDN通过智能技术生成

        嵌入式服务器boa移植成功后,如果想要在boa源码某一处打印数据到串口或者其他输出端,是没办法使用printf函数的,这是由于boa.c文件中main函数中

if(dup2(devnullfd, STDOUT_FILENO) == -1) {
    DIE("can't dup2 /dev/null to STDOUT_FILENO");
}

这段代码造成的。只要修改成

int dupfd;
dupfd = dup(STDOUT_FILENO);
if(dupfd == -1) {
    DIE("can't dup STDOUT_FILENO");
}
close(STDOUT_FILENO);

int dup2fd;
dup2fd = dup2(devnullfd, STDOUT_FILENO);
if(dup2fd == -1) {
    DIE("can't dup2 STDOUT_FILENO");
}

if(dup2(dupfd, dup2fd) == -1) {
    DIE("can't dup2 /dev/null to STDOUT_FILENO");
}

就可以在任意处使用printf函数了。

        我修改时参考的文章在下面的链接中。

dup, dup2, 重定向恢复_RongjianShaw的博客-CSDN博客_文件夹重定向怎么恢复做Shell lab的时候要求完成重定向以及恢复,这里记录一下相关知识#include <unistd.h>int dup(int oldfd);dup用来复制参数oldfd所指的文件描述符。当复制成功是,返回最小的尚未被使用过的文件描述符,若有错误则返回-1.错误代码存入errno中返回的新文件描述符和参数oldfd指向同一个文件,这两个描述符共享同一个数据结构,共享所有的锁定,读写指针和各项全现或标志位。 #include <unistd.h> int dup2(https://blog.csdn.net/weixin_39544046/article/details/116279568?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164803893016780261967374%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164803893016780261967374&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-116279568.142%5Ev3%5Econtrol,143%5Ev4%5Econtrol&utm_term=dup%2Cdup2%EF%BC%8C%E9%87%8D%E5%AE%9A%E5%90%91%E6%81%A2%E5%A4%8D&spm=1018.2226.3001.4187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值