LINUX文件定位

body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(2n){background-color: #f8f8f8;}

文件定位

函数 lseek() 将文件指针设定到相对于 whence ,偏移值为 offset 的位置
#include <sys/types.h>
#include <unistd.h>
off_t  lseek(int fd,  off_t offset,  int whence);   //fd文件描述词
whence 可以是下面三个常量的一个:
SEEK_SET  从文件头开始计算
SEEK_CUR  从当前指针开始计算
SEEK_END  从文件尾开始计算
利用该函数可以实现文件空洞(对一个新建的空文件,可以定位到偏移文件开头1024个节的地方,再写入一个字符(可以是换行或者"\0"),则相当于给该文件分配了1025个字节的空间,形成文件空洞)通常用于多进程间通信的时候的共享内存。
test.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdio.h>
int main()
{
    int fd = open("c.txt", O_WRONLY | O_CREAT,0666);
//  int fd = open("./c.txt", O_WRONLY);
    lseek(fd, 10, SEEK_SET);
    write(fd, "a", 1);    //"a",必须是双引号,代表一个字符串常量的首地址,不能使‘’
   // write(fd,"\0",1);   //这样写用在多进程通信
    close(fd);
    return 0;
}
LINUX文件定位// c.txt 的文件大小现在是11 

test.c
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
int main(int argc,char **argv)
{
        int fd = open(argv[1],O_RDWR);
        char buf[128];
        read(fd,buf,2);
        printf("buf =%s\n",buf);
        strcpy(buf,",world!");
        lseek(fd,0,SEEK_SET);  //偏移到文件开头,产生覆盖
        write(fd,buf,strlen(buf));
        close(fd);
        return 0;
}
LINUX文件定位
上一篇:数据库编程入门培训(一)


下一篇:获取服务器时间