驱动写好了,得写给应用程序来控制驱动,验证他的部分功能。看是否运行正常,
前面我们写的是一个globalmem的内存驱动,也就是共享了一部分的内存出来,可以进行数据的存储。
好了,下面是代码。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#define SIZEWRITE 1024
int readData(int filp,int num,char *buf)
{
int readNum = read(filp,buf,num);
if(readNum != num)
{
readNum = read(filp,buf+readNum,num-readNum);
}
return readNum;
}
int writeData(int filp,char *buf)
{
if(strlen(buf)==0)
{
return 0;
}
return write(filp,buf,strlen(buf)+1);
}
int main()
{
int filp = open("/dev/globalmem",O_RDWR|O_APPEND);///home/wxc/wang
int readNum;
int index;
char buf[SIZEWRITE];
printf("%d\n",filp);
while(1)
{
printf("1:read\n2:write\n3:clean\n4:exit\nplease input a select:");
scanf("%d",&index);
switch(index)
{
case 1:
puts("please input a num of read:");
scanf("%d",&readNum);
readNum = readData(filp,readNum,buf);
printf("this is read data :%s,num of :%d\n",buf,readNum);
break;
case 2:
scanf("%s",buf);
printf("had write:%d data",writeData(filp,buf));
break;
case 3:
fcntl(filp,0x01);
break;
case 4:
return 0;
default:
printf("cmd error\n");
}
index = 0;
getchar();
}
return 0;
}
用到了几个基本的函数,open,write,fcntl。
下面是这几个函数的模型
int open( const char * pathname, int flags);
int open( const char * pathname, int flags, mode_t mode);ssize_t read(int fd,void * buf ,size_t count);
ssize_t write (int fd,const void * buf,size_t count);
int fcntl(int fd , int cmd);
int fcntl(int fd,int cmd,long arg);
int fcntl(int fd,int cmd,struct flock * lock);
依照这几个基本模型大概写就好了,,
我的那个程序大体的思路是
1,发布4个选项,
2,选择读写控制或者退出程序
3,读多少,写多少,
重点:
怎么操作驱动程序,就是mknod创建的文件夹,用open函数打开,然后根据驱动程序的读写函数进行操作就好了,