chrdevbase字符设备驱动开发实验学习--基于MX6U(03)

编写测试APP

测试APP即Linux应用,需用到C库里和文件操作相关的一些函数,如open、read、write和close等函数。

1)open函数:

int open(const char *pathname, int flags);

pathname为对应的设备或文件名称,flags为文件打开模式(只读、只写、读写等)。

2)read函数:

ssize_t read(int fd, void *buf, size_t count); 

三个参数分别标识要读取的文件描述符、保存数据的缓冲区、要读取的数据长度。

3)write、close函数:

ssize_t write(int fd, const void *buf, size_t count);
int close(int fd); 

基于上述相关函数,我们即可完成测试APP的编写工作,从而通过输入相应的指令来对chrdevbase设备执行简单的读写操作,chrdevbaseAPP程序如下:

/*头文件导入*/
#include "stdio.h" 
#include "unistd.h" 
#include "sys/types.h" 
#include "sys/stat.h" 
#include "fcntl.h" 
#include "stdlib.h" 
#include "string.h"

/*定义要写入的数据*/
static char usrdata[] = {"Linux learn"};  

/*主程序*/
int main(int argc, char *argv[])
{
    int fd, retvalue;
    char *filename;
    char readbuf[100], writebuf[100];

    /*判断参数个数是否正确*/
    if(argc != 3){
        printf("Error Usage!\r\n");
        return -1;
    }

    filename = argv[1];

    /*打开驱动文件*/
    fd  = open(filename, O_RDWR);
    if(fd < 0){
        printf("Can't open file %s\r\n", filename);
        return -1;
    }

    /*如果argv[2]值为1,则执行读取数据操作*/
    if(atoi(argv[2]) == 1){
        retvalue = read(fd, readbuf, 50);
        if(retvalue < 0){
            printf("read file %s failed!\r\n", filename);
        }else{
            printf("read data:%s\r\n",readbuf);
        }
    }

    /*如果argv[2]值为2,则执行向设备写数据操作*/
    if(atoi(argv[2]) == 2){ 
        memcpy(writebuf, usrdata, sizeof(usrdata));
        retvalue = write(fd, writebuf, 50);
        if(retvalue < 0){
            printf("write file %s failed!\r\n", filename);
        }
    }

    /*关闭设备*/
    retvalue = close(fd);
    if(retvalue < 0){
        printf("Can't close file %s\r\n", filename);
        return -1;
    }

    
    return 0;
}

若输入以下命令:

./chrdevbaseApp  /dev/chrdevbase  1

 表示示运行chrdevbaseAPP这个测试软件,该软件(应用)要打开/dev/chrdevbase这个设备,同时,从chrdevbase 中读取数据,对chrdevbase设备操作完成以后就执行关闭设备操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值