[問題] 檔案逆輸出

看板C_and_CPP作者 (慢熱的太陽)時間15年前 (2010/11/20 21:20), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
遇到的問題:以下是已寫成的檔案逆輸出CODE,已使用lseek的seekend和 seekcur,想請問說用seekset的話是不是也可以啊?照理說應該也是可以,但頭腦就卡住了, 想不出來@@ 希望得到的正確結果:如果改用seekset也可以寫出檔案逆輸出 開發平台: gcc, Linux) code: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/types.h> 4 #include <sys/uio.h> 5 #include <unistd.h> 6 #include <fcntl.h> 7 8 static int rcat( char *file ) 9 { 10 int fd; 11 char c; 12 13 if( (fd=open(file, O_RDONLY)) < 0 ) { 14 fprintf(stderr, "cannot open file:¥"%s¥"¥n", file); 15 return 1; 16 } 17 18 if( lseek( fd, -1L, SEEK_END ) < 0 ) { 19 fprintf( stderr, "cannot seek¥n" ); 20 return 1; 21 } 22 23 do { 24 if( read( fd, &c, 1 )==1 ) { 25 write( 1, &c, 1 ); 26 } 27 else { 28 fprintf(stderr, "read error¥n"); 29 return 1; 30 } 31 } while( lseek( fd, -2L, SEEK_CUR ) >= 0 ); 32 write( 1, "¥n", 1 ); 33 34 if( close(fd) < 0 ) { 35 fprintf(stderr, "cannot close¥n"); 36 return 1; 37 } 38 return 0; 39 } 40 41 static void usage() 42 { 43 fprintf(stderr, "usage: rcat <filename>...¥n"); 44 } 45 46 int main(int argc, char **argv) 47 { 48 int rc; 49 50 if( argc == 1 ) { 51 usage(); 52 rc = 1; 53 } 54 else { 55 rc = 0; 56 for( --argc, ++argv ; argc>0 ; --argc, ++argv ) { 57 rc += rcat( *argv ); 58 } 59 } 60 return rc; 61 } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 116.83.56.246

11/20 21:23, , 1F
想一想 SEEK_SET 是要傳什麼數字進去 那個數字要怎麼變
11/20 21:23, 1F

11/20 21:24, , 2F
話說你是日文系統嗎? 不然 \ 怎麼會都變成¥...
11/20 21:24, 2F

11/20 21:58, , 3F
用 SEEK_SET 你可能要知道整個檔案多少 bytes 可以考慮
11/20 21:58, 3F

11/20 21:58, , 4F
man 2 lseek 看看... \ 變 $ 嗯...日系風...
11/20 21:58, 4F

11/20 22:02, , 5F
為什麼不用資料逆輸出到檔案呢?
11/20 22:02, 5F
文章代碼(AID): #1CvyiX-i (C_and_CPP)