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
相关文档:
异步通知:一旦设备就绪,则主动通知应用程序,这样应用程序根本不需要查询设备状态,这一点非常类似于硬件上的“中断”的概念,比较准确的称谓是“信号驱动的异步I/O
//启动信号驱动机制
signal(SIGIO, input_handler);//让input_handler()处理SIGIO信号
fcntl(fd, F_SETOWN, getpid());//设 ......
1.首先ldd不是一个可执行程序,而只是一个shell脚本
2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、
LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模 ......