国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言中l(wèi)seek()函數(shù)和fseek()函數(shù)的使用詳解

2020-01-26 14:55:57
字體:
供稿:網(wǎng)友

C語言lseek()函數(shù):移動文件的讀寫位置

頭文件:

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

定義函數(shù):

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

函數(shù)說明:
每一個(gè)已打開的文件都有一個(gè)讀寫位置, 當(dāng)打開文件時(shí)通常其讀寫位置是指向文件開頭, 若是以附加的方式打開文件(如O_APPEND), 則讀寫位置會指向文件尾. 當(dāng)read()或write()時(shí), 讀寫位置會隨之增加,lseek()便是用來控制該文件的讀寫位置. 參數(shù)fildes 為已打開的文件描述詞, 參數(shù)offset 為根據(jù)參數(shù)whence來移動讀寫位置的位移數(shù).

參數(shù) whence 為下列其中一種:

  •     SEEK_SET 參數(shù)offset 即為新的讀寫位置.
  •     SEEK_CUR 以目前的讀寫位置往后增加offset 個(gè)位移量.
  •     SEEK_END 將讀寫位置指向文件尾后再增加offset 個(gè)位移量. 當(dāng)whence 值為SEEK_CUR 或
  •     SEEK_END 時(shí), 參數(shù)offet 允許負(fù)值的出現(xiàn).

下列是教特別的使用方式:
1) 欲將讀寫位置移到文件開頭時(shí):lseek(int fildes, 0, SEEK_SET);
2) 欲將讀寫位置移到文件尾時(shí):lseek(int fildes, 0, SEEK_END);
3) 想要取得目前文件位置時(shí):lseek(int fildes, 0, SEEK_CUR);

返回值:當(dāng)調(diào)用成功時(shí)則返回目前的讀寫位置, 也就是距離文件開頭多少個(gè)字節(jié). 若有錯(cuò)誤則返回-1, errno 會存放錯(cuò)誤代碼.

附加說明:Linux 系統(tǒng)不允許lseek()對tty 裝置作用, 此項(xiàng)動作會令lseek()返回ESPIPE.

C語言fseek()函數(shù):移動文件流的讀寫位置
頭文件:

#include <stdio.h>

定義函數(shù):

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

函數(shù)說明:
fseek()用來移動文件流的讀寫位置.

1、參數(shù)stream 為已打開的文件指針,
2、參數(shù)offset 為根據(jù)參數(shù)whence 來移動讀寫位置的位移數(shù)。參數(shù) whence 為下列其中一種:
    SEEK_SET 從距文件開頭offset 位移量為新的讀寫位置. SEEK_CUR 以目前的讀寫位置往后增加offset 個(gè)位移量.
    SEEK_END 將讀寫位置指向文件尾后再增加offset 個(gè)位移量. 當(dāng)whence 值為SEEK_CUR 或
    SEEK_END 時(shí), 參數(shù)offset 允許負(fù)值的出現(xiàn).

下列是較特別的使用方式:
1) 欲將讀寫位置移動到文件開頭時(shí):fseek(FILE *stream, 0, SEEK_SET);
2) 欲將讀寫位置移動到文件尾時(shí):fseek(FILE *stream, 0, 0SEEK_END);

返回值:當(dāng)調(diào)用成功時(shí)則返回0, 若有錯(cuò)誤則返回-1, errno 會存放錯(cuò)誤代碼.

附加說明: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);}

執(zhí)行

offset = 5offset = 0offset = 10

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 繁昌县| 云南省| 定远县| 常熟市| 山东省| 洪雅县| 农安县| 江安县| 延川县| 确山县| 视频| 永新县| 会宁县| 乌拉特中旗| 绩溪县| 澄迈县| 平果县| 松溪县| 清水河县| 运城市| 台南市| 得荣县| 偏关县| 会宁县| 沙河市| 沐川县| 彩票| 娱乐| 肇东市| 光山县| 栾川县| 盐亭县| 清水县| 江门市| 樟树市| 青神县| 得荣县| 金川县| 家居| 盈江县| 门源|