栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

嵌入式linux学习笔记--控制台的数据重定向 以及 进程打印 数据的重定向

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式linux学习笔记--控制台的数据重定向 以及 进程打印 数据的重定向

记录一下今天的收获,项目上的一个需求是将嵌入式平台内的所有的打印信息输出到一个统一的地方,方便管理,为了实现这种需求 我一共尝试了几种方案,记录一下。

1 . 需求1 嵌入式设备的串口打印信息转移到另一个控制台

这种需求是因为产品的串口默认是不引出的,平时对产品进行调试的时候免不了需要去查看串口信息,那么 我们自然就希望将原本的串口控制台的输出信息转移到当前的通用ssh 登录的控制台。
相关的代码的实现如下:

#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    int tty = -1;
    char *tty_name = NULL;
    if(argc < 2)
    {
        printf("usge: %s [on/off] n",argv[0]);
        return 0;
    }
    
    tty_name = ttyname(STDOUT_FILENO);
    printf("tty_name: %sn", tty_name);
    if(!strcmp(argv[1], "on")){
        
        tty = open(tty_name, O_RDonLY | O_WRONLY);
        ioctl(tty, TIOCCONS);
        perror("ioctl TIOCCONS");
    }else if(!strcmp(argv[1], "off")){
        
        tty = open("/dev/console", O_RDonLY | O_WRONLY);
        ioctl(tty, TIOCCONS);
        perror("ioctl TIOCCONS");
    }else{
        printf("usge: %s [on/off] n",argv[0]);
        return -1;
    }
    close(tty);
    return 0;
}
#使用方法
gcc 1.c
./a.out on
./a.out off

此时我们就可以实现使用ssh登录的控制台看到应该打印到串口的输出 比如 内核的打印信息等

2. 需求2 将某一个进程的所有打印信息传递到一个管道

这个需求就是需要我们将这个进程的打印信息传递到某一个管道内部 方便其他的进程去获得这个管道的数据,进而方便用户程序去管理和维护后续的这些程序。

#include 
#include 
#include 
#include 
const char *fifo_name = "/fifo";
int main ()
{
    FILE *fp; 
    if (access(fifo_name, F_OK) == -1){ // 管道文件不存在 创建命名管道
        int res = mkfifo(fifo_name, 0777);
        if (res != 0){
            fprintf(stderr, "Could not create fifo %sn", fifo_name);
            return -1;
        }
    }
    fp = freopen(fifo_name, "w+", stdout);
    // char *buf =(char *)malloc(1 * sizeof(char)); 
    // 注意 这里需要保证被设置成缓冲区的地方不会被释放!
    // setbuffer(fp,buf,1);
    int cnt = 0;
    while(1){
        printf("Runing ... %dn",cnt ++);
        usleep(1000000);
    }
   fclose(fp);   
   return 0;
}
#使用方法 : 
# 1 .   gcc 1.c        ### 编译
# 2 .   ./a.out &      ### 后台运行
# 3 .   cat /fifo      ### 查看管道内的内容
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号