加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:存储映射I/O(mmap函数)

发布时间:2016-09-27 01:53:33 所属栏目:Unix 来源:站长网
导读:副标题#e# 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共

进程B的代码:

#include <sys/mman.h>    
#include <sys/stat.h>    
#include <fcntl.h>    
#include <stdio.h>    
#include <stdlib.h>    
#include <unistd.h>    
#include <error.h>    
        
#define BUF_SIZE 100    
        
int main(int argc, char **argv)    
{    
    int fd, nread, i;    
    struct stat sb;    
    char *mapped, buf[BUF_SIZE];    
        
    for (i = 0; i < BUF_SIZE; i++) {    
        buf[i] = '#';    
    }    
        
    /* 打开文件 */
    if ((fd = open(argv[1], O_RDWR)) < 0) {    
        perror("open");    
    }    
        
    /* 获取文件的属性 */
    if ((fstat(fd, &sb)) == -1) {    
        perror("fstat");    
    }    
        
    /* 将文件映射至进程的地址空间 */
    if ((mapped = (char *)mmap(NULL, sb.st_size, PROT_READ |     
                    PROT_WRITE, MAP_SHARED, fd, 0)) == (void *)-1) {    
        perror("mmap");    
    }    
        
    /* 映射完后, 关闭文件也可以操纵内存 */
    close(fd);    
        
    /* 修改一个字符 */
    mapped[20] = '9';    
         
    return 0;    
}

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读