在linux中,對於文件的操作可以使用文件描述符來對文件進行操作,也可以使用傳統的標準的IO(即VC6.0中所對文件的操作),下面利用一個文件拷貝的程序使用兩種方式展示兩種文件操作的不同之處。
文件描述符方式:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#define FilePath1 "/home/farsight/dir/aa.txt"
#define FilePath2 "/home/farsight/dir/bb.txt"
int main(int argc,char *argv[]){
int fd1,fd2,fr=0;
int ret1,ret2;
char buf[]={"I Love Linux!"};
char rbuf[4096];
fd1=open(FilePath1,O_RDWR);
if(fd1==-1){
perror("OPEN THE aa.txt");
exit(EXIT_FAILURE);
}
ret1=write(fd1,buf,strlen(buf));
if(ret1==-1){
perror("WRITE THE aa.txt");
exit(EXIT_FAILURE);
}
else{printf("WRITE aa.txt IS SUCCESED!\n");}
fd2=open(FilePath2,O_RDWR|O_CREAT);
if(fd2==-1){
perror("OPEN THE bb.txt");
exit(EXIT_FAILURE);
}
lseek(fd1,0,SEEK_SET);
fr=read(fd1,rbuf,sizeof(buf));
if(fr==0){
printf("COPY IS FAILED!\n");
}
if(fr>0){
write(fd2,buf,fr);
printf("COPY IS SUCCESSED!\n");
close(fd1);
close(fd2);
}
return 0;
}
標準IO方式:
#include<stdio.h>
int main(int argc, char *argv[])
{
int c;
FILE *fp1, *fp2;
fp1 = fopen(argv[1], "rb");
if(fp1==NULL){
printf( "Open failure!");
return -1;
}
fp2 = fopen(argv[2], "wb");
if(fp2==NULL){
printf("Open failure!");
return -1;
}
while((c=fgetc(fp1))!=EOF){
fputc(c, fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
相比之下,標準IO方式更爲簡單。