小弟在linux下写的一段代码,运行结果有些不明白: 当使用lseek时,从文件中读的数据是0,但是文件的内容却是6235; 使用fseek时,从文件中读的的数据是正常的6235. 使用这两个函数读的内容为什么不一样?谢谢。
by disheng727 - C/C++ - 2008-09-12 16:36:23 阅读(7616) 回复(8)
为什么我的lseek老是出错?请高手指点,谢谢!
错误提示:Invalid argument
代码如下:
#include
#include
int fd; offset_t offset; fd=open("/dev/dsk/c0t1d0s7",O_RDONLY); offset=0x7fffffff+(offset_t)1; lseek64(fd,offset,0); error messages: lseek error, invalid argument. errno:22 if change /dev/dsk/c0t1d0s7 with a large file name(>;2g), it works. how to fix it?
每个打开文件都有一个与其相关联的“当前文件位移量”。它是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件位移量处开始,并使位移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定O_APPEND选择项,否则该位移量被设置为0。 可以调用l s e e k显式地定位一个打开文件。 #include #include off_t lseek(int filedes, off_t offset, int whence) ; ...
我写了一个双机传输程序。里面有段代码是这样的 Server: ........ off_t curoff, *datbufp; char datbuf[BUFSIZE * 4 + sizeof(off_t)]; char *iovbufp; ......... iovbufp = &datbuf[sizeof(off_t)]; curoff = lseek(fd, 0L, SEEK_CUR); readn = read(fd, iovbufp, jobsize.ps_end - curoff); *(off_t *)datbuf = curoff; if((writen = send(sockfd, datbuf, rea...
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#include