设若有一个输入文件hello.txt,由字符串“Hello,World!\n”组成,编写一个C程序,使用mmap将该txt文件的内容修改为“Hello, HNU!\n”。
时间: 2024-03-03 20:50:35 浏览: 96
好的,以下是实现该功能的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("hello.txt", O_RDWR); // 打开文件
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
struct stat file_stat;
if (fstat(fd, &file_stat) == -1) { // 获取文件状态
perror("fstat");
exit(EXIT_FAILURE);
}
char *file_content = mmap(NULL, file_stat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); // 映射文件
if (file_content == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
char *new_content = "Hello, HNU!\n";
memcpy(file_content, new_content, strlen(new_content)); // 写入新的内容
if (munmap(file_content, file_stat.st_size) == -1) { // 解除文件映射
perror("munmap");
exit(EXIT_FAILURE);
}
if (close(fd) == -1) { // 关闭文件
perror("close");
exit(EXIT_FAILURE);
}
printf("File content has been modified successfully.\n");
return 0;
}
```
该程序使用了mmap函数将文件映射到进程的虚拟内存空间中,然后使用memcpy函数将新的内容写入文件中。最后使用munmap函数解除文件映射,关闭文件,程序运行结束。
阅读全文