#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