关于使用lseek()创建一个文件的学习引申——运算符优先级
2017-03-13 10:31
323 查看
使用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.对扩展的文件执行写操作一次,才能真正扩展文件大小
if(write(fd,"\0",1)<0){
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 的错误
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.对扩展的文件执行写操作一次,才能真正扩展文件大小
if(write(fd,"\0",1)<0){
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 的错误
相关文章推荐
- 请尝试使用open、lseek等函数创建 一个含有空洞的文件
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- 机器学习小试(7)使用TensorFlow跑通一个通用增量学习流程-根据配置文件创建全连接网络
- C++学习笔记,关于一个文件中的全局变量在其他文件中的使用
- 在一个目录下边快速创建大量文件及目录(使用dos batch)
- 关于在一个工程中使用多个文件的一些注意
- 关于java读文件计算一个方法执行时间的程序的学习
- Linux下库文件学习(三)如何创建和使用库文件
- 关于MMC不能打开文件C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQL Server Enterprise Manager.MSC可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版本创建。也可能你没有访问此文件的足够权限
- 使用VS2008创建一个DLL文件的方法
- 在Maximo7中如何使用日志记录应用程序创建一个日志文件?
- 关于《创建组件**失败。错误消息为**未能加载文件或程序集**或它的某一个依赖。系统找不到指定文件。》的解决方案
- 关于MSSQL存储过程中使用游标的一个小例子(学习)
- 关于如何使用VS高亮显示无扩展名源码文件的一个小技巧
- 使用文件模板和向导创建一个类型文件
- 关于MMC不能打开文件C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQL Server Enterprise Manager.MSC可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版本创建。也可能你没有访问此文件的足够权限
- 在一个目录下边快速创建大量文件及目录(使用dos batch)
- 使用VS2008创建一个DLL文件的方法
- 一步一个脚印学习WCF系列之WCF概要—WCF服务的创建与调用HelloWorld实例,通过配置文件方式(六)
- 在Linux下创建一个大文件,即制造磁盘I/O异常,使用dd命令