Linux 拷贝文件函数:不知道这个对不对,转载了再说
来源:互联网 发布:什么申请淘宝账号注册 编辑:程序博客网 时间:2024/05/05 15:26
2007-12-17 10:56
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 }
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 }
- Linux 拷贝文件函数:不知道这个对不对,转载了再说
- 整理了一下学的文件(不知道对不对,请大神指导)
- 不知道对不对
- 不知道这对不对
- 14周年 项目7体验文件操作 3(实战) 求解:不知道用我的这个方法求平均分对不对
- adapter调用notifyDataSetChanged无效解决了但不知道对不对也不知道原理
- SQLite 的一点点。。。不知道对不对
- SetLocalTime失败[先留着 不知道说的对不对]
- 我不知道这样到底对不对
- 昨天的编程之美初赛,第二题居然过不了。。下面代码改过了,不过不知道对不对
- XML练习文档 不知道自己写的对不对!
- IRate用户评分我的实现方法,不知道对不对
- 树的遍历方式(不知道对不对)
- 我的不知道对不对的dij模板
- 不知道这个索引错在哪里了?
- 这个原先不知道...
- NYOJ 1307 Linux的文件权限对不对?
- 这样做真不知道对不对
- [搬家]DCMTK的编译总结
- Linux查看光卡
- linux 如何结束进程
- cygwin vi 配置
- C99结构体指定初始化
- Linux 拷贝文件函数:不知道这个对不对,转载了再说
- java 修炼之道
- shell 遍历数组
- Ubuntu设置root密码
- linux signal
- jquery自定义插件
- checkbox 单选功能
- linux 常用的命令-持续更新
- mysqldump 只导出数据 或者 只导出表结构