91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Linux中使用lseek函數

發布時間:2021-03-17 14:47:40 來源:億速云 閱讀:139 作者:Leah 欄目:服務器

這篇文章給大家介紹如何在Linux中使用lseek函數,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

lseek函數的作用是用來重新定位文件讀寫的位移。

頭文件以及函數聲明

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

offset為正則向文件末尾移動(向前移),為負數則向文件頭部(向后移)。

描述

lseek() repositions the file offset of the open file description associated with the file descriptor fd to the argument offset according to the directive whence as follows:
SEEK_SET The file offset is set to offset bytes.
SEEK_CUR The file offset is set to its current location plus offset bytes.
SEEK_END The file offset is set to the size of the file plus offset bytes.

lseek() allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent reads of the data in the gap (a “hole”) return null bytes (‘\0') until data is actually written into the gap.

lseek()函數會重新定位被打開文件的位移量,根據參數offset以及whence的組合來決定:

SEEK_SET:
  從文件頭部開始偏移offset個字節。
SEEK_CUR:
  從文件當前讀寫的指針位置開始,增加offset個字節的偏移量。
SEEK_END:
  文件偏移量設置為文件的大小加上偏移量字節。

測試代碼:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define BUFFER_SIZE 1024
#define SRC_FILE_NAME "src_file"
#define DEST_FILE_NAME "dest_file"
//根據傳入的參數來設置offset
#define OFFSET (atoi(args[1])) 

int main(int argc, char*args[]) {
  int src_file, dest_file;
  unsigned char buff[BUFFER_SIZE];
  int real_read_len, off_set;
  if (argc != 2) {
    fprintf(stderr, "Usage: %s offset\n", args[0]);
    exit(-1);
  }
  src_file = open(SRC_FILE_NAME, O_RDONLY);
  dest_file = open(DEST_FILE_NAME, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE );//owner權限:rw
  if (src_file < 0 || dest_file < 0) {
    fprintf(stderr, "Open file error!\n");
    exit(1);
  }
  off_set = lseek(src_file, -OFFSET, SEEK_END);//注意,這里對offset取了相反數
  printf("lseek() reposisiton the file offset of src_file: %d\n", off_set);
  while((real_read_len = read(src_file, buff, sizeof(buff))) > 0) {
    write(dest_file, buff, real_read_len);
  }
  close(dest_file);
  close(src_file);
  return 0;
}

如何在Linux中使用lseek函數

結果解析

觀察offset以及dest_file和src_file文件的大小不難看出:程序通過lseek函數將src_file文件指針重新定位到文件末尾 + offset(注意,本程序對offset取了相反數,即文件末尾 + (-offset))處,然后從文件末尾 + offset處開始向前復制文件到dest_file中。

關于如何在Linux中使用lseek函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枝江市| 庆云县| 沈丘县| 含山县| 永登县| 山东省| 永新县| 齐齐哈尔市| 康平县| 昌都县| 禹州市| 清远市| 邢台市| 洛川县| 巴南区| 霍林郭勒市| 同心县| 宁都县| 那曲县| 尼木县| 得荣县| 灵寿县| 汕头市| 渭南市| 藁城市| 永福县| 托克逊县| 得荣县| 竹山县| 达拉特旗| 合川市| 独山县| 张家口市| 双桥区| 龙陵县| 内乡县| 象州县| 政和县| 吴江市| 福泉市| 东乡族自治县|