本程序实现数据拷贝。
#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 "); 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 ",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 ",argv[2]); exit(3); } } while ((n = read(from, buf, BUFSIZE)) > 0) { if (write(to, buf, n) != n) { fprintf(stderr, "write error "); exit(4); } if (n < 0) { fprintf(stderr, "read error "); exit(5); } } close(from); close(to); exit(0); }