首页 > 其他分享 >C语言 mmap完成文件读写

C语言 mmap完成文件读写

时间:2023-10-18 21:57:21浏览次数:40  
标签:文件 perror mmap 读写 C语言 fd exit include

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    // 打开文件进行读写
    int fd = open("test.log", O_RDWR | O_CREAT, 0600);
    if (fd == -1) {
        perror("open");
        exit(1);
    }

    // 清空文件内容
    if (ftruncate(fd, 0) == -1) {
        perror("ftruncate");
        exit(1);
    }

    // lseek将文件指针往后移动1023位
    lseek(fd, 1023, SEEK_END);
    // 预先写入一个空字符,mmap不能扩展文件长度,预先给文件长度
    write(fd, " ", 1);

    // 将文件映射到内存中进行读写
    char* addr = (char*)mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (addr == MAP_FAILED) {
        perror("mmap");
        exit(1);
    }

    // 关闭文件
    if (close(fd) == -1) {
        perror("close");
        exit(1);
    }

    // 数据写入直接在内存中进行,不需要使用write函数
    strcpy(addr, "123");

    // 释放内存映射
    if (munmap(addr, 1024) == -1) {
        perror("munmap");
        exit(1);
    }

    return 0;
}

标签:文件,perror,mmap,读写,C语言,fd,exit,include
From: https://www.cnblogs.com/WJQ2017/p/17773436.html

相关文章

  • C语言-常用函数
    C语言-常用函数strcat_s函数功能:strcat_s函数与strcat函数一样,主要用于字符串拼接。依赖:头文件string.h主要语法:errno_tstrcat_s(char*strDestination,size_tnumberOfElements,constchar*strSource);描述:用于对字符串进行拼接,将两个字符串连接再一起参数:strDe......
  • 初识C语言(3)
    一、操作符6.关系操作符大于>小于<大于等于>=小于等于<=不等!=相等==7.逻辑操作符逻辑与&逻辑或||intmain(){ inta=3;//真 intb=5;//真 intc=0;//假 intd=0;//假 printf("%d\n",a&&b);//真&&真=真 printf("%d\n",a&&c);//真&&......
  • 青蛙跳台阶(C语言数学排列组合公式求解法)
    题目:从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶,也可以跳2级台阶;问:该青蛙跳到第n级台阶一共有多少种跳法。当只有跳一级台阶的方法跳时,总共跳n步,共有1次跳法                 当用了一次跳二级台阶的方法跳时,总共跳n-1步,共有n-1次......
  • C#上位机序列9: 批量读写+事件广播
    1.读取配置文件及创建变量信息(点位名称,地址,数据类型(bool/short/int/float/long/double))2.读任务&写任务,数据有变化时事件广播通知usingHslCommunication;usingHslCommunication.Core;usingHslCommunication.ModBus;usingPLCEvent.Util;usingSystem;usingSystem.......
  • IO流,通过字节缓冲流来提高读写效率
    BufferedInputStream和BufferedOutputStream  两个流是缓冲字节流,通过内部缓存数组来提高操作流的效率。 当我们开启了很多流时,关闭顺序为:先开的后关闭(后开的先关闭)  在这个缓冲区中,byte数组的默认长度为8192,也是2的整数幂   练习代码如下: 结果是在指定文......
  • C语言-读取一个目录中的文件,并将文件名写入数组
    C语言-读取一个目录中的文件,并将文件名写入数组注意点:文件名是字符串,放入数组,需要数组二维数组,array[m][n],m表示字符串的个数,n表示字符串的长度;使用函数char*strcpy(char*destination,constchar*source),例如:charstrings[3][10];strcpy(strings[0],"hello");......
  • C#配置文件读写(App.config)
      /**************************************************描述:**Author:ys*Date:2023/10/1816:14:32*Update:*************************************************/usingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingS......
  • Qt 读写文件操作
    一、Qt中的读文本的内容1.以QTextStream流的形式来读取文件中的内容。#include<QFile>#include<QTextStream>#include<QDebug>voidReadData(QStringfilePath){QFilefile(filePath);if(!file.exists()){qDebug()<<"can'......
  • 多线程编程同步:读写锁
    读写锁的定义互斥锁锁住后,保证仅有一个线程处理数据(多线程共享的)。要是数据的读取比写入更频繁,且读取操作不涉及共享变量的修改,应允许多个线程读取操作对共享变量的读取。直接使用互斥锁效率太低,若使用读写锁,可以大大提高效率。读写锁的分配规则:1)只要没有线程持有某个特定的读......
  • C语言---去掉字符串中的空格
    有时候,我们会遇到,字符串中有空格,那如何删除呢?要删除空格,就需要找到空格,找到空格,就需要遍历字符串。下面是示例代码:(分别使用了for和while循环)#include<stdio.h>#include<stdlib.h>#include<ctype.h>voidfun(char*str){ inti=0; char*p; /*标记:p=str表示指针指......