linux提供的拷贝函数

linux提供的拷贝函数,第1张

这句话表达得有问题,应该是 Linux 系统提供的文件拷贝命令是 cp。基本格式是:cp file1 file2

若想表达拷贝函数的话,那么只能够用于程序设计语言中,例如:字符串拷贝函数。

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8623617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存