文件I/O编程处理open、read、write、close,等必要函数对文件进行读写操作外,lseek、fcntl也是I/O编程很重要的函数。
lseek函数
lseek函数主要用来移动当前读写位置,第一个参数是文件描述符fd,第二个参数是偏移距离,第三个参数是文件内容指针宏,分别有SEEK_SET(文件头),SEEK_CURR(当前位置),SEEK_END(文件尾部)。该函数的执行成功返回文件当前位置的偏移量,若是失败返回-1.
改变文件位置指针很重要,如果处理不好会出现读写文件时读取错误数据或者将数据写在错误的位置,如下例打开或者创建一个文件,将要写的内容写进文件之后,文件位置指针指向文件的末尾,当没有关闭文件的情况下如果要再次将文件内容读取出来,那必定读不到想要的数据,必须要将文件位置指针重新至于文件的开头。这样改变位置,就不需要再次关闭文件再去读。
lseek通常还可以用来衡量一个文件的大小,如上述打开的文件,要获取该文件的大小,即int filesize=lseek(fd,0,SEEK_END);filesize即为该文件的大小。
lseek还可以用来帮助创建一个空洞文件。如:程序中lseek设置好相应大小的偏移量,但是还是注意一点,设置好偏移量之后必须要有一条write的函数,写一个东西,否则空洞文件创建不成功,大小还是0.程序运行结果如下
原文地址:http://10274409.blog.51cto.com/10264409/1698481