文件编程-------------通过偏移指针(lseek)设置固定大小的文件

来源:互联网 发布:网络棋牌类游戏 编辑:程序博客网 时间:2024/04/30 05:36

1、操作:通过lseek设置一个固定大小的文件:
2、思路:创建一个文件,偏移指针指向你想要大小的那个位置,至少理论上是行得通的,是可以开辟一个这么大的文件的!
这时候你需要想到的是:当你的程序运行结束的时候偏移指针随着程序的结束而消失,而往文件里面写入东西是不会随着程序的结束而结束的,所以想到在想要大小的那个位置卡一个字母,也就是在那个位置先偏移指针指向他然后再写入一个字母,这样一个固定大小的文件就设置完成了;

3、涉及的偏移指针lseek:
(1)、lseek系统调用可以改变文件偏移量(File Offset),文件偏移量是一个整数,表示距文件起始处的字节数。
(2)、格式:

#include <sys/types.h>#include <unistd.h>off_t lseek(int fildes, off_t offset, int whence);

其中,参数whence必需是以下三个常量之一:
SEEK_SET:将文件偏移量设置在距文件开始处offset个字节。
SEEK_CUR:将文件偏移量设置在其当前值加offset,offset可正可负。
SEEK_END:将文件偏移量设置为文件长度加offset,offset可正可负。
int fildes :是你需要创建的并且打开的文件,用文件描述符代替。
off_t offset:表示偏移量的大小,也就是取决于你要设置的文件大小。
我觉得从开头开始卡距离比较方便,int whence用SEEK_SET。

4、代码实现:

#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#define SIZE 1024int main(){    int fd = open("big", O_RDWR|O_CREAT, 0777);    if(fd == -1)    {        perror("open fd");        return -1;    }    // 设置一个文件偏移指向1g处,卡住他;    lseek (fd, 1024*1024*1024, SEEK_SET);    char buf[SIZE] = "hello";    write(fd,buf,1);    close(fd);    return 0;}