程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中lseek()函數和fseek()函數的應用詳解

C說話中lseek()函數和fseek()函數的應用詳解

編輯:關於C++

C說話中lseek()函數和fseek()函數的應用詳解。本站提示廣大學習愛好者:(C說話中lseek()函數和fseek()函數的應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中lseek()函數和fseek()函數的應用詳解正文


C說話lseek()函數:挪動文件的讀寫地位

頭文件:

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

界說函數:

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

函數解釋:
每個已翻開的文件都有一個讀寫地位, 當翻開文件時平日其讀寫地位是指向文件開首, 若是以附加的方法翻開文件(如O_APPEND), 則讀寫地位會指向文件尾. 當read()或write()時, 讀寫地位會隨之增長,lseek()就是用來掌握該文件的讀寫地位. 參數fildes 為已翻開的文件描寫詞, 參數offset 為依據參數whence來挪動讀寫地位的位移數.

參數 whence 為以下個中一種:

  •     SEEK_SET 參數offset 即為新的讀寫地位.
  •     SEEK_CUR 以今朝的讀寫地位往後增長offset 個位移量.
  •     SEEK_END 將讀寫地位指向文件尾後再增長offset 個位移量. 當whence 值為SEEK_CUR 或
  •     SEEK_END 時, 參數offet 許可負值的湧現.

以下是教特殊的應用方法:
1) 欲將讀寫地位移到文件開首時:lseek(int fildes, 0, SEEK_SET);
2) 欲將讀寫地位移到文件尾時:lseek(int fildes, 0, SEEK_END);
3) 想要獲得今朝文件地位時:lseek(int fildes, 0, SEEK_CUR);

前往值:當挪用勝利時則前往今朝的讀寫地位, 也就是間隔文件開首若干個字節. 如有毛病則前往-1, errno 會寄存毛病代碼.

附加解釋:Linux 體系不許可lseek()對tty 裝配感化, 此項舉措會令lseek()前往ESPIPE.

C說話fseek()函數:挪動文件流的讀寫地位
頭文件:

#include <stdio.h>

界說函數:

int fseek(FILE * stream, long offset, int whence);

函數解釋:
fseek()用來挪動文件流的讀寫地位.

1、參數stream 為已翻開的文件指針,
2、參數offset 為依據參數whence 來挪動讀寫地位的位移數。參數 whence 為以下個中一種:
    SEEK_SET 從距文件開首offset 位移量為新的讀寫地位. SEEK_CUR 以今朝的讀寫地位往後增長offset 個位移量.
    SEEK_END 將讀寫地位指向文件尾後再增長offset 個位移量. 當whence 值為SEEK_CUR 或
    SEEK_END 時, 參數offset 許可負值的湧現.

以下是較特殊的應用方法:
1) 欲將讀寫地位挪動到文件開首時:fseek(FILE *stream, 0, SEEK_SET);
2) 欲將讀寫地位挪動到文件尾時:fseek(FILE *stream, 0, 0SEEK_END);

前往值:當挪用勝利時則前往0, 如有毛病則前往-1, errno 會寄存毛病代碼.

附加解釋:fseek()不像lseek()會前往讀寫地位, 是以必需應用ftell()來獲得今朝讀寫的地位.

典范

#include <stdio.h>
main()
{
  FILE * stream;
  long offset;
  fpos_t pos;
  stream = fopen("/etc/passwd", "r");
  fseek(stream, 5, SEEK_SET);
  printf("offset = %d\n", ftell(stream));
  rewind(stream);
  fgetpos(stream, &pos);
  printf("offset = %d\n", pos);
  pos = 10;
  fsetpos(stream, &pos);
  printf("offset = %d\n", ftell(stream));
  fclose(stream);
}

履行

offset = 5
offset = 0
offset = 10

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved