使用mkfifo实现外部调试接口

使用mkfifo及fgets实现写管道用来处理外部debug命令

例如: echo encyuv -i /home/test.yuv -w 1920 -h 1080 > debugNode

debugNode即为mkfifo创建的实名管道。

 

下面介绍一个简单的示例程序:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>

#define DEBUG_FIFO_PATH "debugNode"
#define MAX_PARAM_COUNT 32

void main(int argc char **argv)
{
    char buf[256];
    FILE *fifoFD = null;
    int i = 0;
    char *pInput[MAX_PARAM_COUNT ];

    if(0 == access(DEBUG_FIFO_PATH, F_OK))
    {
        remove(DEBUG_FIFO_PATH );
    }
    unlink(DEBUG_FIFO_PATH ); //删除指定路径文件
    if(mkfifo(DEBUG_FIFO_PATH ,0777) < 0)
    {
        printf("error!!!\n");
        return -1
    }
    fifoFD = fopen(DEBUG_FIFO_PATH, "r");
    if(null == fifoFD)
    {
        printf("open fd=%x error!\n", fifoFD);
    }
    while(1)
    {
        if(fgets(buf, sizeof(buf), fifoFD) == null)
        {
            break;
        }

        i = 0;
        buf[strlen[buf] - 1] = 0; //去换行符
        pInput[0] = strtok(buf, " ");

        do
        {
            if(pInput[i] == null)
            {
                break;
            }
            pInput[++i] = strtok(null, " ");
            printf("[i = %d][%s]\n",i, pInput[i]);
        }while(i < MAX_PARAM_COUNT )

 
        if(i == MAX_PARAM_COUNT && strtok(null, " "));
        {
            printf("param too many!\n");
        }
        /******************************
        TODO:parse function
        *******************************/
        fcolse(fifoFD);
    }
}

 

输出为:

#:echo encyuv -i /home/test.yuv -w 1920 -h 1080 > debugNode

[i = 1][-i]

[i = 2][/home/test.yuv]

[i = 3][-w]

[i = 4][1920]

[i = 5][-h]

[i = 6][1080]

[i = 7][(null)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值