发新话题
打印

关于linux下的文件操作!急!!!!!

下面我们学习一个实例,这个实例用来拷贝文件.
* k$ ]0 r1 U0 @9 Y# p! K2 n) D/ w" k) N' J4 H: c+ e
#include / L  D& {4 G, |8 Z7 [0 Z
#include
% B5 ?4 P5 U0 k2 _9 k' Q#include / J" a. k) p  h( D4 \; D' v% @" w
#include . x7 c. ~6 e/ t% F! W
#include
1 L# Z7 m) }$ P1 D#include
# S+ }% R( r. a  K' Q#include , l$ ?0 o) P6 Z

  H- ^% i8 V, I. M#define BUFFER_SIZE 1024
9 u5 _9 Z9 ^; l. R/ M9 r7 ~- N# n. B% R" D
int main(int argc,char **argv) 5 w3 ~3 q( P# t- X
{
: V) z* ]$ n% H8 G+ _" r2 ]# K
/ P: L& V, [; |1 w1 t5 |1 S- aint from_fd,to_fd;
+ x. @- z; ^0 [1 y7 ^int bytes_read,bytes_write; 1 [/ W. D- M5 R8 P
char buffer[BUFFER_SIZE]; : Y; V: A- K! z8 g# b: N7 S4 @% C% I
char *ptr;
6 ?8 t' c' N, G" G5 u% F! m- G% H( C) w5 B% @  f7 G7 ?
if(argc!=3) . V) V! r8 ?7 Q
{
; c) X) L# \  A4 \$ J1 y( m& _fprintf(stderr,"Usage:%s fromfile tofile a",argv[0]);
/ _3 I- u* Y; j9 {2 i  ^exit(1); 3 ^8 G/ f" s# V2 K
} , o" C7 z: p# m6 O
! N# k- a- l$ }0 ~) K8 ]0 M. ~
/* 打开源文件 */
& `8 G6 u% `6 f; ?7 ]" P
# E1 e: z/ D: U( H7 Nif((from_fd=open(argv[1],O_RDONLY))==-1)
0 T4 @8 k( N" k2 {{ " y# c" p" C3 g  H  C& @
fprintf(stderr,"Open %s Error:%s ",argv[1],strerror(errno)); 2 X3 A% l: A) ]6 Z+ Y3 ?# L" T' N
exit(1);
0 O# Z* J, X0 ]" r6 X9 u}
. _) U5 g6 v! ]7 @. x3 |( i0 _2 g' @0 K! J% n: U4 M
/* 创建目的文件 */ / a1 n2 y+ b4 H" `! d. T" I
; B/ ~- D( C# o) f% `
if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1) , w: E8 {5 x- }! @
{
8 Z+ U( J( o) }* {5 Qfprintf(stderr,"Open %s Error:%s ",argv[2],strerror(errno));
5 w4 k( O1 M5 X5 s6 rexit(1);
0 E4 t8 Q( l* z: i: n% y} 2 _' {6 t! \9 T, n" B* |
; t2 z; i# u4 T' R  B: K) b
/* 以下代码是一个经典的拷贝文件的代码 */ ; Q, y5 k7 e# `( ]% i
3 M* }/ G& n+ A9 J, [3 g6 X( e
while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) # b+ C" ]* l) f
{ ' e7 \9 @# p; C3 B4 {" O, ?
/* 一个致命的错误发生了 */
; ~; H, m2 ^% m" _; z! K% Zif((bytes_read==-1)&&(errno!=EINTR)) break;
9 W8 U* q: l# i% Telse if(bytes_read>0)
' w: [6 K+ W0 B5 b) c{ 7 V- V2 s( B9 [) m! y% c0 Q
ptr=buffer;
! ?! _& d% c) C. b% a* m, `$ Vwhile(bytes_write=write(to_fd,ptr,bytes_read))
5 H: @: ?: j" T7 y  P# N! c{
1 l  h! B' c- _! n/* 一个致命错误发生了 */ : ]( Q/ d: W- [8 K8 \
if((bytes_write==-1)&&(errno!=EINTR))break; . d" v3 u" A5 K) q) K+ A
/* 写完了所有读的字节 */
; |6 @7 W( c. E2 u( O  s4 X9 m& Velse if(bytes_write==bytes_read) break;
8 u: j; q$ z. [6 g& h8 |) j; V/* 只写了一部分,继续写 */
" ]2 }: |. ^* F6 h% L& M% oelse if(bytes_write>0)
! [3 c  g3 H/ y4 j. B! i! r{
) [* O9 B3 I; e' [ptr+=bytes_write;
) d' }% E$ W  mbytes_read-=bytes_write; 7 S( ^- g8 c/ R% z: `0 Y# j) ?
}
- R) R3 f9 f: D& \! _- m& X}
. p! o" T" i8 O9 P/* 写的时候发生的致命错误 */
  R  }! ?0 E* T4 f. O: U$ X" o2 Vif(bytes_write==-1)break; + M) ]8 w1 C/ l5 W9 R3 h
3 Q* h, Z1 N0 ^2 }; A
} ' U8 M: t! [; c. F. D
}
3 H6 ^! D( _  K7 o' O$ n+ pclose(from_fd); 6 F7 a# }- t: o( |% l( K  b- E% v: i
close(to_fd); 7 Q8 R' ?7 W1 Q- u; f
exit(0); 5 [5 Z/ b- a& |' q, S
} : ~; N4 S% U& R. H6 _) F, @/ i
, j- Q$ Z- C) V2 r1 ^( K

6 M2 |9 o  N, q) s6 K0 R* G3 f3 s$ e6 j. V( T. K. o
请问这里main函数中的两个变量argc和argv[]分别代表什么?4 M) N* O* e' e5 [" q$ L
% P& w5 K, S6 B- g" ~  u
还有if(argc!=3)
' h) U+ i+ L# ~9 I9 x' b, l4 o) H{ " U* B" \: o2 L* a( O6 C5 @
fprintf(stderr,"Usage:%s fromfile tofile a",argv[0]);
% a* i7 z4 B2 w& K7 eexit(1);
5 S6 ~" l1 X% O% d& B3 f# ~}
; G7 w5 D1 l/ H) Y& [$ L9 m5 \是实现什么功能的?- H# ]5 m, W. U: _  p
      
吾爱吾师,吾更爱标准答案; 吾爱文学,吾更爱文学女青年。

TOP

金眼妖瞳,为什么相同的问题你要问两次呢?别说下面的这个是别人发的。
8 Z! I# c! \5 M2 w9 Q, Rhttp://www.linuxeden.com/forum/showthread.php?threadid=3557      
庄子曰:“?鱼出游从容,是鱼之乐也。” 惠子曰:“子非鱼,安知鱼之乐?” 庄子曰:“子非我,安知我不知鱼之乐?” 惠子曰:“我非子,固不知子矣;子,固非鱼也,子之不知鱼之乐,全矣。” 庄子曰:“请循其本。子曰‘汝安知鱼乐’云者,既已知吾知之,而问我;我知之濠上也。”

TOP

发新话题