LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: swordhui

求助: 一个获取文件信息的C语言程序.

[复制链接]
 楼主| 发表于 2009-9-12 10:18:42 | 显示全部楼层
Post by pinkme005;2026130
等这两天忙完了和你仔细交流一下,看看程序需求,能不能做下来,能做就试试看,好久没写过了。


非常感谢, 我相信这是一次绝佳的锻炼机会

可以读一下 /bin/ls的源码, 看看它用怎么函数列文件信息.
然后读一下md5sum的源码, 看看它怎么计算文件的cksum.

用自己做的东西, 我相信一定很爽
回复 支持 反对

使用道具 举报

发表于 2009-9-12 20:13:45 | 显示全部楼层
。。。。。
直接用LS组合一下不是更好?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-13 11:33:44 | 显示全部楼层
Post by pinkme005;2026369
。。。。。
直接用LS组合一下不是更好?

当然也可以.
不过我们要的是效率.
因为很多时候你要查询一个文件是否属于一个包, 可能会在很短的时间内调用成千上万次, C语言可以保证效率上最优, 并且有优化的余地, 比如使用hash表.

安装和删除的时候效率不是很重要, 但也有一堆事情要检查, 比如这个文件在其他包是否也存在等, 用C语言处理, 统一性和逻辑性会好一些.

我没用过Arch的pcman, 有空研究一下, 看看能否借鉴.
回复 支持 反对

使用道具 举报

发表于 2009-9-14 20:41:42 | 显示全部楼层
要想把LFS当发行版用, 难点在于要手工编译大量的BLFS软件, 还要手工打包, 这两个难点急须解决, 包管理器倒是次要的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-14 21:23:45 | 显示全部楼层
Post by 5000;2026873
要想把LFS当发行版用, 难点在于要手工编译大量的BLFS软件, 还要手工打包, 这两个难点急须解决, 包管理器倒是次要的

脚本+一个包管理软件应该应该就可以.
脚本的结构很简单, 就是标准步骤, 下载, 解压, 打补丁, 配置, 编译, 安装到临时目录, 使用包管理管理工具记录, 拷贝到根目录, 执行安装后脚本(如果有必要).

打包可以用tar, 将临时目录+后安装脚本包在一起.

BLFS没有的可以参考Gentoo的ebuild
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-14 21:36:46 | 显示全部楼层
C2FW8-MVVCJ
记录一下Keil的CID.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-14 21:41:51 | 显示全部楼层
C2FW8-MVVCJ
记录一下Keil的CID.
回复 支持 反对

使用道具 举报

发表于 2009-9-14 22:32:10 | 显示全部楼层
c不知道,bash倒可以(deps: findutils bash python)
获取文件类型:
find . -exec ls -l {} \; 2>/dev/null | python -c "tmp = raw_input('')
if tmp[0] == 'd':
    print 'D'
elif tmp[0] == 'l':
    print 'S'
elif tmp[0] == '-':
    print 'F'
"
  1. 14/09/2009 18:08:27                                                                                                                              
  2. tusooa (~)                                                                                                                                       
  3. >> find . -name awk -exec ls -l {} \; 2>/dev/null | python -c 'tmp = raw_input('') ; print tmp[0]'                                                     
  4. -                                                                                                                                                      
  5. 14/09/2009 18:08:48                                                                                                                                    
  6. tusooa (~)                                                                                                                                             
  7. >> ls                                                                                                                                                  
  8. awk            Documents                    logs                   php_includes   qemu                       test       tusooa-os           公共的     
  9. bin            Downloads                    lzo2-2.03              Pictures       qt                         test.sh    ubuntu_source       模板      
  10. debpkgs        empty.f                      lzo2_2.03-1.diff.gz    pyerr.txt      screen-configurations.xml  tst.2.txt  version-check.sh    视频      
  11. debpkgs-build  kde                          lzo2_2.03-1.dsc        pyout.txt      sn.bash                    tst2.txt   wget-list           图片      
  12. del            kde-my                       lzo2_2.03.orig.tar.gz  python-lib     sn.bash~                   tst.qml    zhpy_syntax.tar.gz  文档      
  13. Desktop        lfslivecd-x86-6.3-r2052.iso  my                     pythonout.txt  src                        tst.qml~   zhpy.xml            音乐      
  14. develop        localeout                    Myweb                  python.xml     svndw                      tst.txt    zhpy.xml~                     
  15. 14/09/2009 18:08:53                                                                                                                                    
  16. tusooa (~)                                                                                                                                             
  17. >> find . -name awk -exec ls -l {} ';' 2>/dev/null                                                                                                     
  18. -rw-r--r-- 1 tusooa 1000 18  8月 19 14:38 ./awk
  19. 14/09/2009 18:17:15
  20. tusooa (~)
  21. >> find . -name awk -exec ls -l {} \; 2>/dev/null | python -c "tmp = raw_input('')
  22. if tmp[0] == 'd':
  23.     print 'D'
  24. elif tmp[0] == 'l':
  25.     print 'S'
  26. elif tmp[0] == '-':
  27.     print 'F'
  28. "
  29. F
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-14 22:47:57 | 显示全部楼层
是python脚本.

不用python, 可以尝试一下bash+ls+gawk+md5sum.
甚至, 利用find找到后执行脚本的功能, 可以省去gawk和ls...
回复 支持 反对

使用道具 举报

发表于 2009-9-15 21:38:54 | 显示全部楼层
如果楼主还没有改变想法的话,请PM即时信息联系方式,好仔细谈谈程序需求,以便决定怎么做
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表