#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
/*
argc:应用程序参数个数
argv[]:具体的参数内容,字符串形式,这个函数中的第一个参数内容./chrdevbaseAPP;
第二个参数内容filename;
执行文件格式:
./chrdevbaseAPP /dev/chrdevbase 1
*/
int main(int argc,char *argv[])
{
int ret=0;
int fd=0;
char *filename;
char readbuf[100],writebuf[100];//readbuf[100]从文件中读取内容存放的位置;
//writebuf[100]向文件中写入的内容
char writedata[100]="i love you!";
filename=argv[1];
//打开文件
fd=open(filename, O_RDWR);//O_RDWR表示以可读可写的方式打开文件
//判断有没有打开成功
if(fd<0)
{
printf("open failed\r\n");
}
if(atoi(argv[2])==1)
{
//读取文件内容
ret=read(fd, readbuf, 50);
if(ret<0)
{
printf("read failed\r\n");
}else{
printf("读取的内容:%s\r\n",readbuf);
}
}
//向文件写入内容
if(atoi(argv[2])==2){
memcpy(writebuf,writedata,sizeof(writedata));
ret= write( fd, writebuf, 50);
if(ret<0)
{
printf("write failed\r\n");
}
}
//关闭文件
ret=close(fd);
if(ret<0)
{
printf("close failed\r\n");
return -1;
}
return 0;
}
程序说明:
1、用户空间的程序中使用到的函数可以在终端中使用指令man来进行查看相关的函数,并查询到该函数使用到的头文件与使用方法;
man 2 用来查看文本函数;
man 3 用来查看标准函数。
2、函数int main(int argc,char *argv[])中的参数argc 参数表示参数数量,argv[]保存着具体的参数。现在输入指令:./chrdevbaseApp /dev/chrdevbase 1 数“./chrdevbaseApp”、“/dev/chrdevbase”和“1”,这三个参数分别对应 argv[0]、argv[1]和 argv[2]。第一个参数表示运行 chrdevbaseAPP 这个软件,第二个参数表示测试APP要打开/dev/chrdevbase这个设备。第三个参数就是要执行的操作。
3、输入命令的时候其参数都是字符串格式的,因此需要借助 atoi 函数将字符串格式的数字转换为int类型的数字。
4、read(fd, readbuf, 50)表示从fd文件中读取50个字节放入到readbuf数组中;write(fd, writebuf, 50)将writebuf中的50个字节的数据写入到文件fd中。
5、memcpy(writebuf,writedata,sizeof(writedata))表示将writedata中的字符串拷贝到writebuf数组中,大小为sizeof(writedata)个字节。
6、将挂载成功的内核驱动文件当成是一个普通文件进行打开、读写、关闭处理。