最近一直在研究Linux操作,从内心来说,我觉得这个操作系统很有意思,而且拓宽了我局限于C#的思维模式,Tres bien!
学习过程中也遇到一些各种各样奇怪的问题,网上搜索后好像大家也没有一个确切的说法。因此在这里,我打算把我遇到的比较有意思的问题写在博客中,是自己的思考和实验,希望对大家有益。
本文要讲的就是这个看似奇怪的 ^@ 符号。
先上代码:
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/mman.h>
int main(void)
{
int fd = open("mytest.txt",O_CREAT|O_RDWR,0644);
if(fd<0){perror("open file error\n");exit(-1);}
char *p = NULL;
int len = 5;
int ret = ftruncate(fd,len); //传4个字节
if(ret<0){perror("ftruncate error\n");exit(-1);}
p = mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
if(p==MAP_FAILED){perror("mmap error\n");exit(-1);}
strcpy(p,"abc\n");//通过指向映射内存区的指针p来操作映射内存空间
ret = munmap(p,len); //释放映射区
if(ret==-1){perror("munmap error\n");exit(-1);}
close(fd);//关闭被映射的磁盘空间指针(文件)
return 0;
}
可以看到在abc下面多了一个^@字符。这是怎么回事呢?
我发现主要是len的关系,上面我使用的是len=5,我原本的打算是"abc\n"后面还要给'\0'分配一个字符位置,因此len用的是5。结果就是多了一个 ^@ 字符。如果将len改为4,则不会有上面所说的问题,结果如下:
因篇幅问题不能全部显示,请点此查看更多更全内容