//实现一个简单的cp()命令,将源文件的内容复制到新文件中,程序的第一个参数代表已存在的源文件,第二个参数代表新文件 // ./copy test #include <sys/> #include <> #include "tlpi_hdr.h" #define EXIT_SUCESS 0 #ifndef BUF_SIZE /*Allow "cc -D" to override definition*/ #define BUF_SIZE 1024 #endif int main(int argc,char *argv[]) { int intputFd,outputFd,openFlags; mode_t filePerms; ssize_t numRead; char buf[BUF_SIZE]; if (argc != 3 || strcmp(argv[1],"--help") == 0) usageErr("%s old-file new-file\n",argv[0]); /*Open input and output files*/ intputFd = open(argv[1],O_RDONLY); if (intputFd == -1) errExit("opening file %s",argv[1]); openFlags = O_CREAT | O_WRONLY | O_TRUNC; filePerms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; /*rw-rw-rw*/ outputFd = open(argv[2],openFlags,filePerms); if (outputFd == -1) errExit("opening file %s",argv[2]); /*Transfer data until we encounter end of input or an error*/ while ((numRead = read(intputFd,buf,BUF_SIZE)) > 0) if (write(outputFd,buf,numRead) != numRead) fatal("couldn't write whole buffer"); if (numRead == -1) errExit("read"); if (close(intputFd) == -1) errExit("close input"); if (close(outputFd) == -1) errExit("close output"); exit(EXIT_SUCESS); } /* 使用示例: [root@localhost linux-test]# vi [root@localhost linux-test]# gl++ [root@localhost linux-test]# ls tlpi [root@localhost linux-test]# echo "hello world" > [root@localhost linux-test]# echo > [root@localhost linux-test]# cat [root@localhost linux-test]# ./ [root@localhost linux-test]# cat hello world */