该程序模拟linux 的 cp 拷贝命令
打开,创建文件,读取和写文件使用系统的函数
/**
* cp.c
*/
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#define BUFFERSIZE 4096
#define COPYMODE 0644
void errmsg(char *msg,char *msgn);
int main(int ac,char *av[])
{
int source_fp,target_fp;
char buff[BUFFERSIZE];
int n_chars; //fact read/write char number.
if(ac!=3)
errmsg("please input source,target file",*av);
if(strcmp(av[1],av[2])==0)
errmsg("source path equal target.","");
if((source_fp=open(av[1],O_RDONLY))==-1)
errmsg("soruce error.",av[1]);
if((target_fp=creat(av[2],COPYMODE))==-1)
errmsg("target error.",av[2]);
while((n_chars=read(source_fp,buff,BUFFERSIZE))>0)
{
if(write(target_fp,buff,n_chars)!=n_chars)
errmsg("write target error.",av[2]);
}
if(n_chars==-1)
errmsg("read source error.",av[1]);
if(close(source_fp)==-1 || close(target_fp)==-1)
errmsg("close file error.","");\
return 0;
}
void errmsg(char *msg,char *msgn)
{
fprintf(stderr,"Error:%s\n",msg);
perror(msgn);
exit(1);
}
* cp.c
*/
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#define BUFFERSIZE 4096
#define COPYMODE 0644
void errmsg(char *msg,char *msgn);
int main(int ac,char *av[])
{
int source_fp,target_fp;
char buff[BUFFERSIZE];
int n_chars; //fact read/write char number.
if(ac!=3)
errmsg("please input source,target file",*av);
if(strcmp(av[1],av[2])==0)
errmsg("source path equal target.","");
if((source_fp=open(av[1],O_RDONLY))==-1)
errmsg("soruce error.",av[1]);
if((target_fp=creat(av[2],COPYMODE))==-1)
errmsg("target error.",av[2]);
while((n_chars=read(source_fp,buff,BUFFERSIZE))>0)
{
if(write(target_fp,buff,n_chars)!=n_chars)
errmsg("write target error.",av[2]);
}
if(n_chars==-1)
errmsg("read source error.",av[1]);
if(close(source_fp)==-1 || close(target_fp)==-1)
errmsg("close file error.","");\
return 0;
}
void errmsg(char *msg,char *msgn)
{
fprintf(stderr,"Error:%s\n",msg);
perror(msgn);
exit(1);
}