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