关于Linux设备驱动程序的测试 |
您所在的位置:网站首页 › linux设备驱动的加载方式 › 关于Linux设备驱动程序的测试 |
1.创建 第一步要做的是创建一个共享内存结构。#include #include int shmget (key_t key, int size, int shmflg); key是一个整数值,用来指定一个关键字,它可以用于搜寻一个共享内存结构。 size表示要创建的共享内存的大小,以字节计算。 shmflg为创建指派属性。 IPC_CREAT表示创建一个新的共享内存结构,若key已经代表了一个结构并且该结构未被删除,则直接返回这个结构的标识。 IPC_EXCL需要与IPC_CREAT一起使用,指定IPC_EXCL后,若key已经关联了一个共享内存结构,则shmget出错,返回-1。所以IPC_EXCL可以保证shmget创建一个新的结构。若shmflg为0,则shmget寻找key关联的共享内存结构,若找到,返回改结构的标识符,否则返回-1。 若调用成功,则返回得到的共享内存结构标识符,否则返回-1。2.连接 创建了一个共享内存结构之后,需要将这个结构和一段存储区域、一个指针连接起来,才能通过该指针正确访问共享的内存区域。#include #include void *shmat (int shmid, const void *shmaddr, int shmflg); shmid是shmget调用得到的共享内存结构标识符。 shmaddr指定连接的目的地址。若shmaddr为0,则由内核选择目的内存段,并返回该段的指针。若shmaddr不为0,且shmflg未指定SHM_RND选项,则shmaddr必须为页对齐的地址,该地址表示的内存段将被连接;若shmaddr不为0且shmflg指定了SHM_RND,则连接的地址为小于shmaddr且最接近shmaddr的SHMLBA的倍数。 shmflg指定连接的属性。除了上面说的SHM_RND外,还可以指定SHM_RDONLY属性。若指定了SHM_RDONLY,则以只读方式连接,否则连接的内存是可读可写的。 若调用成功则返回得到的存储区域指针,否则返回-1。3.访问连接成功后,根据的到的指针,我们就可以根据需要来使用得到的存储空间了。 4.控制我们可以根据需要来设置的到的共享内存结构的属性,甚至可以实现删除。#include #include int shmctl (int shmid, int cmd, struct shmid_ds *buf); shmid是要操作的共享内存结构标识符。 cmd用来指定我们要进行的操作。 IPC_STAT用来获得共享内存段的状态信息,结果保存在buf中 IPC_SET用来设置共享内存段的一些状态信息,在buf的成员shm_perms中预先指定我们想要改变的属性。 IPC_RMID给shmid指定的内存段加上删除标志,在该段最后一次断开连接后,内存将被释放。 SHM_LOCK锁定内存段以保证不会被访问。 SHM_UNLOCK解除锁定。 SHM_LOCK、SHM_UNLOCK只在Linux系统中有效,并且只有超级用户才可以使用。buf保存shmid标识的共享内存结构的信息。5.断开一般用完共享内存段之后要断开连接。#include #include int shmdt (const void *shmaddr); shmaddr是连接后得到的指针。 若调用成功,返回0,否则返回-1。 注意,断开操作只是切断进程与该共享内存的关联,并不会释放内存段。介绍几个调用的功能,使用共享内存的操作顺序为:创建(查找)——连接——控制——访问——断开,在确信不用时进行销毁(实际上是控制的一个特例)。
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |