next up previous contents
Next: 實機練習題 Up: 檔案讀寫 Previous: 二進位檔讀寫   Contents   DYWANG_HOME

fseek 函式

  1. fseek 函式設定檔案指標的偏移量。
    1. 宣告語法:從 formwhere 偏移 offset。
      int fseek(FILE *stream, long offset, int fromwhere);
      
    2. 三個 SEEK 常數
      1. SEEK_SET:檔案開頭
      2. SEEK_CUR:現在檔案指標位置
      3. SEEK_END:檔案結尾
  2. 範例:fread 讀取二進位檔,直到回傳值 0 (讀不到資料,也就是檔案結束),再用 fwrite 寫到另一個檔案。
    [dywang@dyw219 zzz]$ vim fileio5.c
    [dywang@dyw219 zzz]$ cat fileio5.c
    #include <stdio.h>
    
    int main( int argc, char *argv[] ) {
    	FILE *fp1;
    	char ch;
    	
    	fp1 = fopen( argv[1], "r" );
    	if( fp1 != NULL) {
    		while( (ch=fgetc(fp1)) != EOF )
    			printf("%c", ch);
    		fseek(fp1, 2, SEEK_SET);
    		while( (ch=fgetc(fp1)) != EOF )
    			printf("%c", ch);
    	} 
    	else {
    		printf("File %s does not exist.\n", argv[1]);
    	}
    	fclose(fp1);
    
    	return 0;
    }
    
  3. 編譯
    [dywang@dyw219 zzz]$ gcc -o fileio5 fileio5.c
    
  4. 產生測試檔 fio5test
    [dywang@dyw219 zzz]$ echo 'abc 123' > fio5test
    [dywang@dyw219 zzz]$ cat fio5test 
    abc 123
    
  5. 執行結果:第一次從檔案開頭讀到檔案結尾,第二次從檔案開頭位移 2 個位元組,讀到檔案結尾。
    [dywang@dyw219 zzz]$ ./fileio5 fio5test
    abc 123
    c 123
    



2020-01-02