免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 12145 | 回复: 31
打印 上一主题 下一主题

[C] 谁有opensolaris中的tcopy.c, 可以付一点辛苦费 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-08 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-01 16:48 |只看该作者 |倒序浏览
tcopy.c 的源代码, 是open-solaris中的哦.


henry6123@sohu.com

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
2 [报告]
发表于 2015-07-01 17:01 |只看该作者

  1. /*
  2. * CDDL HEADER START
  3. *
  4. * The contents of this file are subject to the terms of the
  5. * Common Development and Distribution License, Version 1.0 only
  6. * (the "License").  You may not use this file except in compliance
  7. * with the License.
  8. *
  9. * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10. * or http://www.opensolaris.org/os/licensing.
  11. * See the License for the specific language governing permissions
  12. * and limitations under the License.
  13. *
  14. * When distributing Covered Code, include this CDDL HEADER in each
  15. * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16. * If applicable, add the following below this CDDL HEADER, with the
  17. * fields enclosed by brackets "[]" replaced with your own identifying
  18. * information: Portions Copyright [yyyy] [name of copyright owner]
  19. *
  20. * CDDL HEADER END
  21. */
  22. /*
  23. * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
  24. * Use is subject to license terms.
  25. */

  26. /*        Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T        */
  27. /*          All Rights Reserved          */

  28. /*
  29. * University Copyright- Copyright (c) 1982, 1986, 1988
  30. * The Regents of the University of California
  31. * All Rights Reserved
  32. *
  33. * University Acknowledgment- Portions of this document are derived from
  34. * software developed by the University of California, Berkeley, and its
  35. * contributors.
  36. */

  37. #pragma ident        "%Z%%M%        %I%        %E% SMI"

  38. #include <stdio.h>
  39. #include <signal.h>
  40. #include <sys/types.h>
  41. #include <sys/file.h>
  42. #include <sys/fcntl.h>
  43. #include <sys/mtio.h>
  44. #include <stdlib.h>
  45. #include <limits.h>
  46. #include <errno.h>

  47. char *buff;                                /* buffer for read/write */
  48. int filen = 1;                                /* file number being processed */
  49. long count, lcount;                        /* number of blocks for file */
  50. extern void RUBOUT();
  51. int nfile;                                /* used for ??? */
  52. off64_t size, tsize;                        /* number of bytes in file, total */
  53. int ln;
  54. char *inf, *outf;
  55. int copy;
  56. size_t size_64K = 64 * 1024;
  57. size_t size_256K = 256 * 1024;


  58. int
  59. main(argc, argv)
  60. char **argv;
  61. {
  62.         int        n, nw, inp, outp;
  63.         struct mtop op;
  64.         size_t buf_size = size_64K;

  65.         if (argc <= 1 || argc > 3) {
  66.                 (void) fprintf(stderr, "Usage: tcopy src [dest]\n");
  67.                 return (1);
  68.         }
  69.         inf = argv[1];
  70.         if (argc == 3) {
  71.                 outf = argv[2];
  72.                 copy = 1;
  73.         }
  74.         if ((inp = open(inf, O_RDONLY, 0666)) < 0) {
  75.                 (void) fprintf(stderr, "Can't open %s\n", inf);
  76.                 return (1);
  77.         }
  78.         if (copy) {
  79.                 if ((outp = open(outf, O_WRONLY, 0666)) < 0) {
  80.                         (void) fprintf(stderr, "Can't open %s\n", outf);
  81.                         return (3);
  82.                 }
  83.         }
  84.         if ((buff = malloc(buf_size)) == NULL) {
  85.                 (void) fprintf(stderr, "Can't allocate memory for tcopy\n");
  86.                 return (4);
  87.         }
  88.         if (signal(SIGINT, SIG_IGN) != SIG_IGN)
  89.                 (void) signal(SIGINT, RUBOUT);
  90.         ln = -2;
  91.         for (;;) {
  92.                 count++;
  93.                 errno = 0;
  94.                 while ((n = read(inp, buff, buf_size)) < 0 &&
  95.                     errno == ENOMEM && buf_size < INT_MAX) {
  96.                         if (buf_size < size_256K)
  97.                                 buf_size = size_256K;
  98.                         else
  99.                                 buf_size *= 2;
  100.                         free(buff);
  101.                         if ((buff = malloc(buf_size)) == NULL) {
  102.                                 (void) fprintf(stderr,
  103.                                     "Can't allocate memory for tcopy\n");
  104.                                 return (4);
  105.                         }
  106.                         op.mt_op = MTFSF;        /* Rewind to start of file */
  107.                         op.mt_count = (daddr_t)0;
  108.                         if (ioctl(inp, MTIOCTOP, (char *)&op) < 0) {
  109.                                 perror("Read record size");
  110.                                 return (6);
  111.                         }
  112.                         errno = 0;
  113.                 }
  114.                 if (n > 0) {
  115.                         if (copy) {
  116.                                 nw = write(outp, buff, (size_t)n);
  117.                                 if (nw != n) {
  118.                                         (void) fprintf(stderr, "write (%d) !="
  119.                                             " read (%d)\n", nw, n);
  120.                                         (void) fprintf(stderr, "COPY "
  121.                                             "Aborted\n");
  122.                                         return (5);
  123.                                 }
  124.                         }
  125.                         size += n;
  126.                         if (n != ln) {
  127.                                 if (ln > 0)
  128.                                         if (count - lcount > 1)
  129.                                                 (void) printf("file %d: records"
  130.                                                     " %ld to %ld: size %d\n",
  131.                                                     filen, lcount, count-1, ln);
  132.                                         else
  133.                                                 (void) printf("file %d: record"
  134.                                                     " %ld: size %d\n",
  135.                                                     filen, lcount, ln);
  136.                                 ln = n;
  137.                                 lcount = count;
  138.                         }
  139.                 } else {
  140.                         if (ln <= 0 && ln != -2) {
  141.                                 (void) printf("eot\n");
  142.                                 break;
  143.                         }
  144.                         if (ln > 0)
  145.                                 if (count - lcount > 1)
  146.                                         (void) printf("file %d: records %ld to"
  147.                                             " %ld: size " "%d\n",
  148.                                             filen, lcount, count-1, ln);
  149.                                 else
  150.                                         (void) printf("file %d: record %ld:"
  151.                                             " size %d\n", filen, lcount, ln);
  152.                                 (void) printf("file %d: eof after %ld records:"
  153.                                     " %lld bytes\n", filen, count-1, size);
  154.                         if (copy) {
  155.                                 op.mt_op = MTWEOF;
  156.                                 op.mt_count = (daddr_t)1;
  157.                                 if (ioctl(outp, MTIOCTOP, (char *)&op) < 0) {
  158.                                         perror("Write EOF");
  159.                                         return (6);
  160.                                 }
  161.                         }
  162.                         filen++;
  163.                         count = 0;
  164.                         lcount = 0;
  165.                         tsize += size;
  166.                         size = 0;
  167.                         if (nfile && filen > nfile)
  168.                                 break;
  169.                         ln = n;
  170.                 }
  171.         }
  172.         if (copy)
  173.                 (void) close(outp);
  174.         (void) printf("total length: %lld bytes\n", tsize);
  175.         return (0);
  176. }

  177. void
  178. RUBOUT()
  179. {
  180.         if (count > lcount)
  181.                 --count;
  182.         if (count)
  183.                 if (count > lcount)
  184.                         (void) printf("file %d: records %ld to %ld: size"
  185.                             " %d\n", filen, lcount, count, ln);
  186.                 else
  187.                         (void) printf("file %d: record %ld: size %d\n",
  188.                             filen, lcount, ln);
  189.         (void) printf("interrupted at file %d: record %ld\n", filen, count);
  190.         (void) printf("total length: %lld bytes\n", tsize+size);
  191.         exit(1);
  192. }
复制代码
可以掏辛苦费了。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-08 06:20:00
3 [报告]
发表于 2015-07-02 10:06 |只看该作者
本帖最后由 木刀客 于 2015-07-02 10:34 编辑

回复 2# windoze


    稍等, 我先编译哈, 一张老人头??

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2015-07-02 10:14 |只看该作者
猫哥威武得一塌糊涂

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
5 [报告]
发表于 2015-07-02 10:42 |只看该作者
回复 3# 木刀客

……唉……算了……在网上花了3分钟搜到的东西……

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
6 [报告]
发表于 2015-07-02 10:46 |只看该作者
话说这个tcopy从Solaris还叫SunOS那会儿起基本上就没改过,你忽然找这个干嘛?

论坛徽章:
2
2015亚冠之平阳省
日期:2015-07-08 10:15:132015亚冠之广州恒大
日期:2015-08-11 10:11:23
7 [报告]
发表于 2015-07-02 10:46 |只看该作者
猫哥号厉害。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-08 06:20:00
8 [报告]
发表于 2015-07-02 11:00 |只看该作者
有一些很古老的磁带。 九轨开盘带, 就想军统间谍录音的那种, 磁带的。  这种磁带到上世纪80年代用的很多, 当时是SCSI接口。
现在有一套SUN的老工作站, 刚好连接磁带机。

不好意思, 瘟毒死下, 连接SCSI磁带机,还能勉强好办, 驱动也勉强能找到。 可是SCSI后的设备的那个跳线的号, 在瘟毒死下不会找设备了。 在网上找了些识别SCSI设备的程序。 吓死人了, 比我要读出磁带数据地程序还常几倍

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-08 06:20:00
9 [报告]
发表于 2015-07-02 11:08 |只看该作者
我先solaris那个坛子挂帖, 后来又在solaris档案中心挂帖, 有人看, 无人答。

在这里出现答复,   谢谢猫哥(其实你应该比我小一点), 就想笑傲江湖的令狐,你好厉害

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
10 [报告]
发表于 2015-07-02 11:10 |只看该作者
回复 8# 木刀客

我猜你说的那个“跳线”应该是设LUN的吧,如果OS找不到设备你看看是不是磁带机的lun和其它SCSI设备冲突了,比如SCSI卡自己要占一个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP