精华内容
下载资源
问答
  • lseek

    2019-05-25 22:32:00
    调用lseek显式的为一个打开文件设置偏移量 #include <unistd.h> off_t lseek(int fd, off_t offset, int where); 返回值:成功,返回新的文件偏移量;出错,返回-1 参数:  offset:  相对where偏移的...

    调用lseek显式的为一个打开文件设置偏移量

    #include <unistd.h>

    off_t lseek(int fd, off_t offset, int where);

    返回值:成功,返回新的文件偏移量;出错,返回-1

    参数:

      offset:

        相对where偏移的位置,可以为正数也可以为负数。当为正数时,从where开始向后偏移offset个字节;当为负数时,从where开始向前偏移offset绝对值个字节。

      where:

        SEEK_SET  将文件的偏移量设置为距离文件开始处offset个字节

        SEEK_CUR  将文件的偏移量设置为当前值加offset个字节

        SEEK_END  将文件的偏移量设置为文件长度加offset个字节

    注:

      ①lseek可以检测文件是否支持设置偏移量,如果文件描述符指向一个pipe、FIFO或网络套接字,则返回-1,并将errno设置为ESPIPE。

      ②文件偏移量可以大于当前文件大长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞。位于文件中没有写过的字节都被读为0.

      ③lseek仅将当前文件的偏移量记录在内核中,它并不引起任何的I/O操作。然后,该偏移量用于下一个读或写操作(这也是为什么设置偏移量后要向文件中写一些内容才能创建空洞文件的原因)  

    例子:

    转载于:https://www.cnblogs.com/dog-pi/p/10924275.html

    展开全文
  • 怎样用lseek读取最后三个字节lseek(fd, -3, SEEK_END);read(xxx如何使用libcurl实现HTTP的GET方法获取文件长度用libcurl实现下载功能很方便,只要调用libcurl库即可。long downloadFileLenth = 0;123456789101112...

    怎样用lseek读取最后三个字节

    lseek(fd, -3, SEEK_END);

    read(xxx

    如何使用libcurl实现HTTP的GET方法获取文件长度

    用libcurl实现下载功能很方便,只要调用libcurl库即可。

    long downloadFileLenth = 0;

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    CURL *handle = curl_easy_init();

    curl_easy_setopt(handle, CURLOPT_URL, url);

    curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, “GET”); //使用CURLOPT_CUSTOMREQUEST

    curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body

    if (curl_easy_perform(handle) == CURLE_OK)

    {

    curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);

    }

    else {

    downloadFileLenth = -1;

    }

    curl_easy_cleanup(handle);

    可以完美解决用GET获取文件长度,而不下载文件内容。

    怎样用lseek()函数将一个文件的内容附加到另一个文件上?

    int main()

    {

    int iSrcFd = 0;

    int iDesFd = 0;

    CHAR acReadBuf[128] = {0};

    int iReadBytes = 0;

    int iWrtBytes = 0;

    /* open the source file*/

    iSrcFd = open("1.txt",O_RDWR | O_SYNC);

    if (iSrcFd < 0)

    {

    return -1;

    }

    iReadBytes = read(iSrcFd, acReadBuf, 128);

    /* open the des file */

    iDesFd = open("2.txt",O_RDWR | O_SYNC);

    if (iSrcFd < 0)

    {

    close(iSrcFd);

    return -1;

    }

    lseek(iDesFd, 0, SEEK_END);

    iWrtBytes = write(iDesFd, acReadBuf, 128);

    close(iDesFd);

    close(iSrcFd);

    return 0;

    }

    lseek(iDesFd, 0, SEEK_END);就是将当前文件读写的位置移动到文件末尾

    linux lseek函数怎么用

    Linux的lseek函数用来控制一个打开的文件的读写位置,它的函数原型如下:

    off_t lseek(int fildes,off_t offset ,int whence);

    参数的用法:fildes参数为一个已打开的文件描述符;参数offset为读写位置的位移数,这个位移数是根据参数whence来确定的;whence参数分为下列三种:

    SEEK_SET:表示offset用来直接设置读写位置。

    SEEK_CUR:表示以目前的读写位置往后增加offset个位移量。

    SEEK_END:表示将读写位置指向文件尾后再增加offset个位移量。

    当whence值为SEEK_CUR或SEEK_END时,参数offet允许负值出现。当lseek调用成功时返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno会存放错误代码。下面是几个使用示例:

    将读写位置移到文件开头:lseek(myfile, 0, SEEK_SET);

    将读写位置移到文件尾:lseek(myfile, 0, SEEK_END);

    想要取得目前文件位置:off_t cur=lseek(myfile, 0, SEEK_CUR);

    注意:使用lseek函数需要包含以下头文件:

    #include

    #include

    为什么C语言中read函数和write函数间要用lseek来调整读取顺序

    -由于程序在打开文件时文件操作指针位于文件起始位置,即偏移量0

    -读取了1个字符的内容给变量c,文件指针偏移量为1

    -这时如果想将c值写到文件开始位置,则需要移动文件指针到文件开始

    -于是lseek就是移动文件当前指针的语句,它通知系统将文件指针移动到从文件开始位置(SEEK_SER)起的第0字节

    -这个程序比较奇怪,明明打开文件时选用了0_WRONLY参数,表明这个打开是只写的,但上来就读

    展开全文
  • lseek详解

    万次阅读 2018-10-26 17:18:34
    lseek函数详解 lseek ① 对文件进行操作时,该文件是动态文件,动态文件在内存中的形态就是文件流的形式。 ② 在动态文件中,通过文件指针来表征这个正在操作的位置,文件指针是vnode中的一个元素。 ③ 该指针不能...

    朱老师嵌入式核心课程笔记
    lseek函数详解

    • lseek
      ① 对文件进行操作时,该文件是动态文件,动态文件在内存中的形态就是文件流的形式。
      ② 在动态文件中,通过文件指针来表征这个正在操作的位置,文件指针是vnode中的一个元素。
      ③ 该指针不能直接访问,Linux提供lseek函数访问这个文件指针。
      ④ 打开一个文件时,默认下,文件指针只想文件流的开始,这时候write是从文件开始位置写入的,write与read自带移动文件指针的功能,write写入n字节后,文件指针会自动往后移动n位。
      ⑤ man 2 lseek(lseek是一种文件读写的API)

      #include <sys/types.h>
      #include <unistd.h>

       off_t lseek(int fd, off_t offset, int whence);
      

      whence

    SEEK_SETThe offset is set to offset bytes
    SEEK_ENDThe offset is set to the size of the file plus offset bytes
    SEEK_CURThe offset is set to its current

    在读写文件时,写入文件后,需要用lseek将文件指针指向文件开始位置,否则会从文件最后位置开始读

    • 用lseek计算文件长度
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    
    
    int cal_len(const char *pathname)
    {
    	int fd = -1;		// fd 就是file descriptor,文件描述符
    	int ret = -1;
    	
    	// 第一步:打开文件
    	fd = open(pathname, O_RDONLY);
    	if (-1 == fd)		// 有时候也写成: (fd < 0)
    	{
    		//printf("\n");
    		perror("文件打开错误");
    		// return -1;
    		return -1;
    	}
    	//else
    	//{
    		//printf("文件打开成功,fd = %d.\n", fd);
    	//}
    	
    	// 此时文件指针指向文件开头
    	// 我们用lseek将文件指针移动到末尾,然后返回值就是文件指针距离文件开头的偏移量,也就是文件的长度了
    	ret = lseek(fd, 0, SEEK_END);
    	
    	return ret;
    }
    
    int main(int argc, char *argv[])
    {
    	int fd = -1;		// fd 就是file descriptor,文件描述符
    	int ret = -1;
    	
    	if (argc != 2)
    	{
    		printf("usage: %s filename\n", argv[0]);
    		_exit(-1);
    	}
    
    	printf("文件长度是:%d字节\n", cal_len(argv[1]));
    	return 0;
    }
    
    • 用lseek创建一个空洞文件
      ① 空洞文件就是这个文件有一段是空的;
      ② 普通文件中间不能有空,write文件时从前往后移动文件指针,依次写入;
      ③ 用lseek往后跳过一段,就形成空洞文件;
      ④ 空洞文件对多线程共同操作文件非常有用。需要创建一个很大文件时,从头开始依次创建时间很长,可以将文件分成多段,多个线程操作每个线程负责其中一段的写入。
     ret = lseek(fd, 10, SEEK_SET);
    
    展开全文
  • lseek函数

    2021-02-26 15:13:10
    lseek函数 应用场景: 文件的读写使用同一偏移位置 使用lseek获取和拓展文件大小,必须引起IO操作 off_t lseek(int fd, off_t offset, int whence); //fd:文件描述符 //offset:偏移量 //whence:起始偏移位置 //...

    lseek函数

    应用场景:

    1. 文件的读写使用同一偏移位置
    2. 使用lseek获取和拓展文件大小,必须引起IO操作
    off_t lseek(int fd, off_t offset, int whence);
    //fd:文件描述符
    //offset:偏移量
    //whence:起始偏移位置
    //返回值:
    //	   成功:始位置偏移量
    //	   失败:-1
    

    代码示例

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <pthread.h>
    #include <fcntl.h>
    int main(int argc, char *argv[])
    {
       int fd = open(argv[1] ,O_RDWR);
        if(fd==-1)
       {
           perror("open error");
            exit(1);
       }
        int lenth = lseek(fd, 111, SEEK_END);        
        printf("file size:%d\n",lenth);
        close(fd);
        return 0;
    }
    
    

    truncate函数

    truncate可以直接拓展文件

    int ret = truncate("dict.cp",250);
    

    传入传出参数

    传入参数

    1. 指针作为函数参数
    2. 通常有const关键字修饰
    3. 指针指向有效区域,在函数内部做读操作

    传出参数

    1. 指针作为函数参数
    2. 在函数调用之前,指针指向的空间可以无意义,但必须有效
    3. 在函数内部做写操作
    4. 函数调用结束后,充当函数返回值

    传入传出参数

    1. 指针作为函数参数
    2. 在函数调用前,指针指向的空间有实际意义
    3. 在函数内部,先做读操作后做写操作
    4. 函数调用结束后,充当函数返回值
    展开全文
  • Lseek函数

    2019-04-27 14:32:55
    lseek函数 lseek对文件描述符fd指定文件的读写指针进行设置,也就是说,它可以设置文件的下一个读写位置 头文件: #include <unistd.h> #include <sys/types.h> 函数原型: off_t lseek(int fd, off_t ...
  • lseek用法

    2019-12-11 15:49:09
    EEK_SET 将读写位置指向文件头后再增加offset个位移量。 SEEK_CUR 以目前的读写位置往后增加offset个位移量。 SEEK_END 将读写位置指向文件尾后再增加offset个位移量。 当whence 值为SEEK_CUR 或...lseek(int filde...
  • lseek 使用

    2019-07-23 22:43:59
    off_t lseek(int fd, off_t offset, int whence); fd 表示要操作的文件描述符 offset是相对于whence(基准)的偏移量 whence 可以是SEEK_SET(文件指针开始),SEEK_CUR(文件指针当前位置) ,SEEK_E...
  • C语言 底层IO lseek.pdf

    2021-08-26 13:36:48
    C语言 底层IO lseek.pdf
  • Linux应用编程之lseek详解 1、lseek函数介绍 (1)、文件指针:当我们要对一个文件进行读写时,一定要先打开这个文件,所以我们读写的所有文件都是动态文件。动态文件在内存中的形态就是文件流的形式。 (2...
  • lseek的使用

    2021-02-02 10:14:14
    lseek - reposition read/write file offset SYNOPSIS #include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_t offset, int whence); DESCRIPTION lseek() repositions the file ...
  • lseek函数用法

    2021-03-12 11:30:05
    lseek函数: #include <unistd.h> off_t lseek(int fd, off_t offset, int whence); 返回值:若成功,返回新的文件偏移量;若失败,返回-1 可以调用lseek显示地为一个打开文件设置偏移量。 每个打开的...
  • lseek Function

    2016-02-05 09:12:05
    每个打开的文件都与“current file offset”相关联,这通常是一个非负整数用以测量从文件开始的...默认的打开的文件位移值初始为0,除非指定为O_APPEND打开文件的位移可以显式的通过调用lseek来设置。#include #incl
  • Name : lseek – reposition read/write file offset lseek函数的作用是用来重新定位文件读写的位移。 头文件以及函数声明 #include #include off_t lseek(int fd, off_t offset, int whence); offset为正则向...
  • lseek函数:

    2021-03-12 22:47:47
    lseek函数:  文件偏移  linux中可以使用系统函数lseek来修改文件偏移量(读写位置)    fseek的作用及参数 SEEK_SEK SEEK_CUR SEEK_END  int fseek(FILE *stream, long offset, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,666
精华内容 9,866
关键字:

lseek