权哥求助啊!Linux中mmap文件映射的问题 为什么最后的那个for循环语句输出不了文件的内容呢?
简单的列出来所需的头文件<stdio.h><unistd.h><string.h><stdlib.h><sys/mman.h><fcntl.h><sys/stat.h>s...
简单的列出来所需的头文件
<stdio.h><unistd.h><string.h> <stdlib.h><sys/mman.h> <fcntl.h><sys/stat.h>
struct stu
{
char name[20];
int age;
float score;
};
int main()
{
int fd;
int i;
int size;
int count;
struct stat st;
struct stu* s;
//打开文件, 如果文件不存在据创建一个, 文件存在就直接打开
fd = open("map", O_RDWR|O_CREAT);
if(-1==fd)
{
fd = open("map", O_RDWR|O_APPEND);
if(-1==fd)
perror("open error!"), exit(-1);
}
fstat(fd, &st);
size = st.st_size;//显示文件的大小
count = size/sizeof(struct stu);//记录的条数 = 文件大小/每条记录的大小
printf("======================================\n");
printf("map size:%d\nmap count:%d\n", size, count);
printf("======================================\n");
ftruncate(fd, size+sizeof(struct stu));//扩张文件的长度
s = mmap(0, getpagesize(), PROT_WRITE|PROT_READ, MAP_PRIVATE, fd, 0);//映射到文件
if(NULL==s)
{
perror("mmap error!"), exit(-1);
}
//写入到映射的文件中去
printf("输入姓名:");
scanf("%s", s[count].name);
printf("输入年龄:");
scanf("%d", &s[count].age);
printf("输入成绩:");
scanf("%f", &s[count].score);
// 问题就在这, 为什么下面的语句答应不出文件中的内容呢?
for(i=0; i<=count; i++)
{
printf("%s:%d:%.2f\n", s[i].name, s[i].age, s[i].score);
}
munmap(s, getpagesize());
close(fd);
printf("文件关闭!\n");
return 0;
} 展开
<stdio.h><unistd.h><string.h> <stdlib.h><sys/mman.h> <fcntl.h><sys/stat.h>
struct stu
{
char name[20];
int age;
float score;
};
int main()
{
int fd;
int i;
int size;
int count;
struct stat st;
struct stu* s;
//打开文件, 如果文件不存在据创建一个, 文件存在就直接打开
fd = open("map", O_RDWR|O_CREAT);
if(-1==fd)
{
fd = open("map", O_RDWR|O_APPEND);
if(-1==fd)
perror("open error!"), exit(-1);
}
fstat(fd, &st);
size = st.st_size;//显示文件的大小
count = size/sizeof(struct stu);//记录的条数 = 文件大小/每条记录的大小
printf("======================================\n");
printf("map size:%d\nmap count:%d\n", size, count);
printf("======================================\n");
ftruncate(fd, size+sizeof(struct stu));//扩张文件的长度
s = mmap(0, getpagesize(), PROT_WRITE|PROT_READ, MAP_PRIVATE, fd, 0);//映射到文件
if(NULL==s)
{
perror("mmap error!"), exit(-1);
}
//写入到映射的文件中去
printf("输入姓名:");
scanf("%s", s[count].name);
printf("输入年龄:");
scanf("%d", &s[count].age);
printf("输入成绩:");
scanf("%f", &s[count].score);
// 问题就在这, 为什么下面的语句答应不出文件中的内容呢?
for(i=0; i<=count; i++)
{
printf("%s:%d:%.2f\n", s[i].name, s[i].age, s[i].score);
}
munmap(s, getpagesize());
close(fd);
printf("文件关闭!\n");
return 0;
} 展开
1个回答
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询