免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 一梦如是
打印 上一主题 下一主题

如何更巧妙的利用shell的fd [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
31 [报告]
发表于 2007-01-09 12:24 |只看该作者
我的测试结果:
  1. $ seq 30 >HUGEFILE; { head -10 <&3; dd <&3 >&4;} 3<HUGEFILE 4<>HUGEFILE; cat HUGEFILE
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12. 0+1 records in
  13. 0+1 records out
  14. 60 bytes transferred in 0.000479 seconds (125281 bytes/sec)
  15. 11
  16. 12
  17. 13
  18. 14
  19. 15
  20. 16
  21. 17
  22. 18
  23. 19
  24. 20
  25. 21
  26. 22
  27. 23
  28. 24
  29. 25
  30. 26
  31. 27
  32. 28
  33. 29
  34. 30
  35. 24
  36. 25
  37. 26
  38. 27
  39. 28
  40. 29
  41. 30
复制代码

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
32 [报告]
发表于 2007-01-09 12:25 |只看该作者
  1. 24
  2. 25
  3. 26
  4. 27
  5. 28
  6. 29
  7. 30
复制代码

和我一样啊,请看最后7行,应该被截断

论坛徽章:
0
33 [报告]
发表于 2007-01-09 13:21 |只看该作者
确实,没注意

论坛徽章:
0
34 [报告]
发表于 2007-01-09 13:23 |只看该作者
其实这也容易理解,前面的文件内容被重写了,但是文件长度没变
就是说,得重新设置文件长度。

论坛徽章:
0
35 [报告]
发表于 2007-01-09 13:38 |只看该作者
  1. { head -10 <&3; dd <&3 >&4;} 3<HUGEFILE 4<>HUGEFILE
复制代码

woodie兄的环境确实能把文件截短?
我的环境测试不能的,现在我所知能做到截断的只有dd的skip,seek,count操作数

2.6.18-1.2869.fc6

GNU bash, version 3.1.17(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

dd (coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
36 [报告]
发表于 2007-01-09 14:12 |只看该作者
不能,疏忽了。不好意思!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
37 [报告]
发表于 2007-01-09 14:55 |只看该作者
好像要在正确的地方截断,必须用seek参数。

论坛徽章:
0
38 [报告]
发表于 2007-01-09 16:58 |只看该作者
原帖由 awk就是awp加ak 于 2007-1-9 10:12 发表
虽然分开文件读和写指针,没有使用临时文件,从而节省了1/2磁盘空间和1/2磁盘读写量,相对是很大改进。
我的想法是:根本不进行文件块拷贝操作,只是修改文件开始指针,并且重新设置大小。或许有些贪婪了,哈


失败!

本来以为能改一下偏移,设置一下长度就完事了。
狗狗了一下,都是需要进行磁盘拷贝。打算晚上吃狗肉炖豆腐去
由于文件系统没有提供相关的调用,于是打算看看inode.h了,看得直想吐还是没找到什么端倪,彻底泄气了~

论坛徽章:
0
39 [报告]
发表于 2007-01-09 17:49 |只看该作者
文件EOF标志的修改必须对数据块进行写操作。

awk兄想写什么?不对数据块进行写操作的truncate?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
40 [报告]
发表于 2007-01-09 18:06 |只看该作者
原帖由 一梦如是 于 2007-1-9 17:49 发表
文件EOF标志的修改必须对数据块进行写操作。

awk兄想写什么?不对数据块进行写操作的truncate?

我想他是想从文件的前面截断,保留后部 -- "脑袋砍掉,屁股留下",不知我理解的对不对?^_^我也想过,可惜不会做。^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP