在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方式更为简单。