编写测试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设备操作完成以后就执行关闭设备操作。