本程序实现数据拷贝。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define BUFSIZE 4096
int main(int argc,char* argv[])
{
if(argc!=1&&argc!=3)
{
fprintf(stderr,"Invalid argument number\n");
exit(1);
}
int from,to;
int n;
char buf[BUFSIZE];
if(argc==1)
{
from = STDIN_FILENO;
to = STDOUT_FILENO;
}
else
{
if((from = open(argv[1], O_RDONLY))==-1)
{
fprintf(stderr,"open %s error\n",argv[1]);
exit(2);
}
if((to = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR))==-1)
{
fprintf(stderr,"open %s error\n",argv[2]);
exit(3);
}
}
while ((n = read(from, buf, BUFSIZE)) > 0)
{
if (write(to, buf, n) != n)
{
fprintf(stderr, "write error\n");
exit(4);
}
if (n < 0)
{
fprintf(stderr, "read error\n");
exit(5);
}
}
close(from);
close(to);
exit(0);
}