若想表达拷贝函数的话,那么只能够用于程序设计语言中,例如:字符串拷贝函数。
1 /*2 * Copy a (real) file to another (real) file.
3 * file can be a regular file or a simlink
4 */
5 int create_copy_file(const char *source, const char *target)
6 {
7 struct stat src_stat
8
9 if (lstat(source, &src_stat) == -1)
10 return -1
11
12 if (S_ISLNK(src_stat.st_mode)) {
13 char lnk[1024]
14 int lnk_size
15 if ((lnk_size = readlink(source, lnk, 1023)) == -1)
16 return -2
17 lnk[lnk_size] = '\0'
18 if (symlink(lnk, target) == -1)
19 return -3
20 } else if (S_ISREG(src_stat.st_mode)) {
21 int src, dst
22 int rsize
23 char buf[1024]
24 if ((src = open(source, O_RDONLY)) == -1) {
25 close(dst)
26 return -4
27 }
28 if ((dst = creat(target, src_stat.st_mode)) == -1)
29 return -5
30 while ((rsize = read(src, buf, 1024))) {
31 if (rsize == -1 &&errno == EINTR)
32 continue
33 if (rsize == -1) {
34 close(src)
35 close(dst)
36 return -6
37 }
38 while (write(dst, buf, rsize) == -1)
39 if (errno != EINTR) {
40 close(src)
41 close(dst)
42 return -7
43 }
44 }
45 close(src)
46 close(dst)
47 } else {
48 return -8
49 }
50 return 0
51 }
#include<stdio.h>#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
int main(int argc,char **argv)
{
if(argc<3)//参数少于3,给出提示并退出
{
printf("请按如下格式运行!\n")
printf("./程序 源文件 目标文件\n")
return 0
}
int fd1 = open(argv[1],O_RDONLY)//只读方式打开源文件
if(-1 == fd1)
{
perror("打开文件失败")
return 0
}
int fd2 = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0666)//读写方式打开文件,有则清空,没有则创建
char buf[100]={0}
int res
while(res = read(fd1,buf,sizeof(buf)))//从源文件读出
{
write(fd2,buf,res)//写入到目标文件
}
close(fd1)//关闭文件
close(fd2)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)