关于使用lseek()创建一个文件的学习引申——运算符优先级
来源:互联网 发布:软件功能介绍 编辑:程序博客网 时间:2024/05/21 07:08
使用lseek()创建一个文件的过程
1.open()打开一个文件
//<(6级) 的优先级大于 = (14级),所以不能写成 fd=open<0这种判断形式
if((fd=open(argv[1],O_RDWR|O_CREAT,0777))<0){sys_err("open",3);// errno=3 open failed
}
2.lseek()扩展空文件
if(lseek(fd,MAP_LEN-1,SEEK_SET)<0){
sys_err("lseek",4);
}
3.对扩展的文件执行写操作一次,才能真正扩展文件大小
sys_err("write",5);
}
在这个过程中遇到对的问题
lseek:illegal seek:报这个错误的原因一般是偏移超出内存,或者说要查找索引的文件本身是错误的
排错:
1.首先应该检查一下文件描述符fd是否是一个有效值
如果在打开文件的时候使用了 if(fd=open(filename,O_RDWR,0777)<0)这种错误的方式
为什么说这种方式是错误的?
首先把判断条件单独拿出来就是:fd=open()<0
而实际上这个式子的含义是 先判断open的返回值是否小于0,为真就返回1,为假就返回0,比如:
int a;
a= 3<5;//3小于5为真,判断式返回1,a的值最后是1
a=5<3;//5小于3 为假,判断式返回0,a的值最后是0
所以open()实际返回的文件描述符为3,而3>0,所以open()<0 整体返回的是0,这样最后导致fd=0的情况出现,而fd=0表示的是当前进程默认打开的系统标准输入文件,不能对标准输入文件设置sleek()(原因还不清楚),所以就会报错illegle seek 的错误
0 0
- 关于使用lseek()创建一个文件的学习引申——运算符优先级
- 利用lseek()函数创建一个固定大小的文件
- 一个关于lseek的问题
- 关于运算符优先级的一个面试题
- PHP运算符优先级的一个例外
- 关于JAVA运算符的优先级
- 关于php运算符优先级的几道题
- HDU2033引发的关于运算符优先级
- C++关于运算符的优先级
- 关于运算的优先级的
- php——学习笔记,运算符优先级
- C语言学习第二天——运算符优先级
- Java学习——Java运算符优先级
- 关于运算符优先级有关
- PHP学习笔记——运算符的优先级和表达式;
- 【踩坑】PHP中关于运算符优先级使用中可能遇到的问题
- 运算符的优先级
- 运算符的优先级
- mysql性能优化(八) mysql索引优化
- java中不可变类
- HELLO PYTHON
- 软件工程师
- 业界|机器学习改变商业的17个案例
- 关于使用lseek()创建一个文件的学习引申——运算符优先级
- Changing DAG & DAG members IP addresses
- DATAGUARD原理及搭建
- MongoDB 运行状态、性能监控,分析
- 面部变形+基于特征的图像变形+field warping-Siggraph 1992
- Android 正则配对手机号跟身份证
- Spring总结_04_容器和bean
- Android Studio升级到3.3出现的问题-手动解决办法
- 简述C++泛型化编程思想