最近一直在研究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;
}

这段代码主要是通过mmap来实现磁盘映射内存空间的功能。我将"abd\n"这个字符串映射到内存中对应的磁盘空间上(也就是那个mytest.txt文件中),结果用vi打开看到是这样的:

可以看到在abc下面多了一个^@字符。这是怎么回事呢?

我发现主要是len的关系,上面我使用的是len=5,我原本的打算是"abc\n"后面还要给'\0'分配一个字符位置,因此len用的是5。结果就是多了一个 ^@ 字符。如果将len改为4,则不会有上面所说的问题,结果如下:

最新文章

  1. McCabe度量法计算程序的环路复杂性
  2. 【PC工具】网站服务器端口检测工具,网络端口扫描工具,win10telnet安装方法
  3. 错误make: nvcc: Command not found 解决方案
  4. OGRE 1.7.2 [Cthugha] 编译配置全过程方法
  5. 正则表达式使用及常见表达式汇总
  6. Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例
  7. spark中dataframe解析_Spark-SQL
  8. 随机森林-集成学习方法(分类)
  9. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?
  10. python 提取邮箱的正则表达式
  11. 【每日一具18】基于HTTP协议的局域网文件共享软件
  12. iOS 性能优化之内存优化
  13. 小Z的袜子【莫队算法】
  14. 眼睛有血斑,就是眼底出血?
  15. 分布式架构-ZK客户端工具Curator框架分布式锁及基本使用
  16. c语言幻数游戏,C中的幻数
  17. 在家月入5q+有手机就能赚米,推荐14个让你在家就能挣米的软件
  18. MFC链表CList类
  19. MATLAB 2016a系统错误解决方案
  20. MWC18丨中兴通讯联合GSMA举办5G峰会 迎接万物智联世界

热门文章

  1. 用python刷微信阅读_老司机用python脚本刷微信读书的时长
  2. Matlab 使用笔记(本人出品,必属精品)
  3. Python 的非正式介绍3.9版本
  4. iscc2023-misc【详解】
  5. Android个性字体,折腾Android系列第三期 字体图标显个性
  6. APT攻击是什么?面对APT攻击,我们应该怎么做?
  7. 介绍ps有几种通道:颜色通道、Alpha通道和专色通道
  8. iOS开发者必备:App Store营销广告指南
  9. 详解pytorch实现猫狗识别98%附代码
  10. 【文献阅读04】基于ReRAM的高能效可重配置神经网络加速器