lseek() 定位一个已经打开的文件
2016-11-02 17:17
204 查看
Lseek
lseek()的作用是,设置文件内容的读写位置。
每个打开的文件都有一个“当前文件偏移量”,是一个非负整数,用以度量从文件开始处计算的字节数。通常,读写操作都是从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。默认情况下,你打开一个文件(open),除非指定O_APPEND参数,不然位移量被设为0。
使用lseek()需要包含的头文件:<sys/types.h>,<unistd.h>
函数原型:
off_t lseek(int fd, off_t offset, int whence);
off_t是系统头文件定义的数据类型,相当于signed int
参数:
fd:是要操作的文件描述符
whence:是当前位置基点。
SEEK_SET,以文件的开头作为基准位置,新位置为偏移量的大小。
SEEJ_CUR,以当前文件指针的位置作为基准位置,新位置为当前位置加上偏移量。
SEEK_END,以文件的结尾为基准位置,新位置位于文件的大小加上偏移量。
offset:偏移量,要偏移的量。可正可负(向后移、向前移);
返回值:
成功返回相对于文件开头的偏移量。 出错返回-1
lseek()的作用是,设置文件内容的读写位置。
每个打开的文件都有一个“当前文件偏移量”,是一个非负整数,用以度量从文件开始处计算的字节数。通常,读写操作都是从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。默认情况下,你打开一个文件(open),除非指定O_APPEND参数,不然位移量被设为0。
使用lseek()需要包含的头文件:<sys/types.h>,<unistd.h>
函数原型:
off_t lseek(int fd, off_t offset, int whence);
off_t是系统头文件定义的数据类型,相当于signed int
参数:
fd:是要操作的文件描述符
whence:是当前位置基点。
SEEK_SET,以文件的开头作为基准位置,新位置为偏移量的大小。
SEEJ_CUR,以当前文件指针的位置作为基准位置,新位置为当前位置加上偏移量。
SEEK_END,以文件的结尾为基准位置,新位置位于文件的大小加上偏移量。
offset:偏移量,要偏移的量。可正可负(向后移、向前移);
返回值:
成功返回相对于文件开头的偏移量。 出错返回-1
1 #include <stdio.h> 2 #include <fcnlt.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <unity.h> 6 7 int main(int argc, char * argv[]) 8 { 9 int fd; 10 char buf[100]; 11 if ((fd = open(argv[1], O_RDONLY)) < 0) { 12 perror("open"); 13 exit(-1); 14 } 15 read(fd, buf, 1); 16 write(STDOUT_FILENO, buf, 1); 17 lseek(fd, 2, SEEK_CUR); 18 19 read(fd, buf, 1); 20 write(STDOUT_FILENO, buf, 1); 21 lseek(fd, -1, SEEK_END); 22 23 read(fd, buf, 1); 24 write(STDOUT_FILENO, buf, 1); 25 lseek(fd, 0, SEEK_SET); 26 27 read(fd, buf, 1); 28 write(STDOUT_FILENO, buf, 1); 29 close(fd); 30 printf("\n"); 31 32 return 0; 33 }
相关文章推荐
- 获取工程下的路径和判断一个文件是否已经被打开
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- delphi 打开文件夹并定位到一个文件
- [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- delphi 打开文件夹并定位到一个文件
- [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- 使用“devenv.exe /edit ”命令在一个已经存在的vs实例里打开文件
- [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- 如何用eclipse打开并运行一个已经写好的java文件?
- 如果使用追加标志O_APPEND打开一个文件以便读、写,能否仍能用lseek在任一位置开始读? 能否用lseek更新文件中任一部分的数据?
- C#如何打开一个文件夹并定位到某个文件
- delphi 打开文件夹并定位到一个文件(使用ShellExecute时加一个select参数,原来这么简单!)
- 怎样用JAVA打开一个已经写好的TXT文件? 是打开,不是读取啊!!!
- delphi 打开文件夹并定位到一个文件(关键是/select参数)
- Access数据库:它已经被别的用户以独占方式打开,操作必须使用一个可更新的查询,不能锁定文件
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- [VB.NET]vb.net中如何检测一个已知的文件是否已经被打开或者被其他应用程序调用
- 用JAVA打开一个已经写好的TXT文件
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案