[問題] 檔案逆輸出
遇到的問題:以下是已寫成的檔案逆輸出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
11/20 21:23, 1F
→
11/20 21:24, , 2F
11/20 21:24, 2F
→
11/20 21:58, , 3F
11/20 21:58, 3F
→
11/20 21:58, , 4F
11/20 21:58, 4F
→
11/20 22:02, , 5F
11/20 22:02, 5F