lseek()函数用于重新定位读/写文件偏移量,默认打开一个文件时,除非指定O_APPEND,否则偏移量为0,并不适合所有文件,如管道、FIFO或网络套接字或终端。函数原型如下: fd为文件描述符,用于指定要写入的文件; offset表示偏移量,表示要移动的字节数,可以为正数、负数、零; whence指定偏移的基准点,有三组值: 若whence为SEEK_SET,表示从文件开始处偏移; 若whence为SEEK_CUR,表示从当前位置偏移; 若whence为SEEK_END,表示从文件结尾处偏移; 如果文件描述符指向一个管道、FIFO或网络套接字,返回-1,且errno为ESPIPE; 测试lseek的返回值时需要谨慎,不要测试是否小于0,要测试是否等于-1; lseek仅将文件偏移量记录到内核,不引起任何IO操作,该偏移量用于下一次读写; 文件偏移量可以大于文件长度,对文件下一次的写操作将加长该文件并构成一个空洞(文件大小一样,但是占用的磁盘块不一样),没写过的字节被读为0;
|