LINUX 内存映射
在常规IO中,我们一般都是认为和文件系统做IO操作总是无法避免的必须不厌其烦的write,read,而事实上这种方式在进行一些大文件操作的时候,显得十分的不便,下面这段代码即展示了如果将物理硬盘上的数据映射到内存中,我们像操作普通的内存一样对文件进行读写:
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
#include <string.h>
using namespace std;
main(int argc, char** argv) // map a normal file as shared mem:
{
int fd,i;
char *p_map;
char cs[]="helloworld";
fd=open( argv[1],O_CREAT|O_RDWR,00777 );
p_map = (char*)mmap(NULL,10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
for(i = 0;i<10;i++)
{
cout << *(p_map+i);
}
memcpy(p_map,cs,10);
munmap(p_map,10);
}
结果如下:
Administrator@GZHT-D1FF475D33 /LINUX/pro/hello
$ ./man1.exe cc
qwertyuiop
Administrator@GZHT-D1FF475D33 /LINUX/pro/hello
$ cat cc
helloworld
相关文档:
总览
用iptables -ADC 来指定链的规
则
,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......
modprobe命令比insmod命令强大,它在加载某模块时会同时加载该模块所依赖的其他模块。使用modprobe命令加载的模块若以“modprobe –r filename”的方式卸载将同时卸载其依赖的模块。
printk打印到var/log/messages
2.6内核中已加载的信息也存在于/sys/module目录下,加载hello.ko后,内核中将包含/sys/mod ......
使用下列洪可以通过主设备号和次设备号生成dev_t
MKDEV(int major, int mainor)
如果复制的内存是简单类型,如char、int、long等,则可以使用简单的put_user()和get_user()
Linux系统建议以如图方式定义ioctl命令码
命了码的设备类型字段为一个“幻数”,可以是0-0xff之间的值,内核中的ioctl-number ......