校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Linux lseek函數的使用詳解

Linux lseek函數的使用詳解

熱門標簽:大連電銷外呼系統運營商 泰州智能外呼系統排名 接電話機器人罵人 長春電銷外呼系統代理商 百度地圖標注尺寸無法顯示 400電話干嘛怎么申請信用卡 外呼系統虛擬號碼 400電話申請知乎 代理外呼系統創業

注:如果文章內容有誤,請留言指出,謝謝合作。

名字

Name : lseek - reposition read/write file offset

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;
}

結果解析

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:大慶 中衛 清遠 雅安 臺灣 長治 安陽 興安盟

巨人網絡通訊聲明:本文標題《Linux lseek函數的使用詳解》,本文關鍵詞  Linux,lseek,函數,的,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux lseek函數的使用詳解》相關的同類信息!
  • 本頁收集關于Linux lseek函數的使用詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 丽水市| 紫阳县| 洛阳市| 山东| 普宁市| 江都市| 昔阳县| 泰来县| 高邑县| 湘阴县| 克拉玛依市| 柳州市| 喀喇| 县级市| 西丰县| 资兴市| 万源市| 民勤县| 永仁县| 赞皇县| 永昌县| 静宁县| 舟山市| 舞阳县| 武鸣县| 乌兰浩特市| 泸定县| 马鞍山市| 五大连池市| 鄂伦春自治旗| 尚志市| 元谋县| 内黄县| 罗源县| 确山县| 施甸县| 特克斯县| 天气| 沙河市| 进贤县| 阜城县|