首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

用lseek+read函数读入文件不存在的位置,其后没有报错,程序并没有崩溃.为什么

2013-08-01 
用lseek+read函数读入文件不存在的位置,然后没有报错,程序并没有崩溃.为什么?如下所示的程序:(/tmp/test1

用lseek+read函数读入文件不存在的位置,然后没有报错,程序并没有崩溃.为什么?
如下所示的程序:(/tmp/test1文件已经有内容了)


#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
using namespace std;
int main()
{
    int fd=open("/tmp/test1",O_RDONLY);
    lseek(fd,2,SEEK_END);
    cout << errno << endl;
    char buf[4]={0};
    int r=read(fd,buf,3);
    cout << "r=" << r << ",errno=" << errno << "buf=" << buf << endl;
    return 0;
}

程序用GCC4.4编译运行看起来并没有问题,程序
# ./a.out
0
r=0,errno=0buf=
# echo $?
0

我的问题: 既然SEEK_END定位到了文件末尾,那么lseek(fd,2,SEEK_ENDD)实际就指向了一个并不存在文件偏移量。
为什么lseek和read都没有报错,errno也没有设定任何的值? 本来我的预期是,lseek或者read都要报错,要们崩溃退出啊。

求解释!

[解决办法]
可以lseek,有一种技术,叫空洞文件。但是读不出来东西。
[解决办法]
楼上正解。
这个和内存不一样,如果是内存溢出,有可能破坏内存中重要的数据,会造成系统崩溃。

热点排行