快乐虾的工具箱-0.0.2

来源:互联网 发布:算法交易模型 编辑:程序博客网 时间:2024/04/28 13:00

经过前段时间的学习,终于理解了cygwin的大部分运行机制,只是很遗憾对其signal关键技术的细节未能完全掌握,以致于依赖于signal机制的程序未能正确运行。还是采用老办法,先转移阵地,哪天再杀回来,嘿嘿。

先发布一个阶段性的版本,以示咱至少往前挪了一小步。这个版本包括以下内容:

Cygwin checkout 2008-09-28

Bash 4.0                                                                                                

Core-utils 7.6

Grep 2.5.4

Sed 4.2

Diffutils 2.8.1

由于signal机制的缺失,bash的下述测试脚本未能与正确结果完全一致:

array coproc cprint dirstack errors execscript extglob glob-test

heredoc herestr ifs-posix intl iquote jobs more-exp nquote2 nquote3

nquote4 posixpat precedence printf read redir rhs-exp rsh set-e

shopt trap type

 

有兴趣的可以到个人资源中下一个权当玩具:

http://lights_joy.download.csdn.net/

 

 

回顾整个过程,基本实现了当初的一个主要目标:让cygwin.dllvs2008crt和平共处!但是为了达到此目的,不得不做了一些牺牲:

1、对cygwin的所有导出函数进行了重命名的处理,比如open就变成了cyg_open,再由于批量替换的操作,导致了很多的提示字符串特别怪异。

2、需要先运行vs2008crt代码,然后再运行cygwincrt,于是一个很简单的main函数就变成了:

int

real_main (int argc, char **argv, char** envp);

 

int

main (int argc, char **argv)

{

       return cygwin_crt0(real_main);

}

 

int

real_main (int argc, char **argv, char** envp)

{

………

原来的main函数。

}

3、虽然可以混合使用cygwin.dllvs的库,但是当需要使用fork的时候,很多东西就只能限制在使用cygwin.dll提供的函数。比如内存分配,文件操作等,在不使用fork的时候想用哪个都可以,但是如果要使用fork机制,则只能使用cygwin.dll

一个比较理想的状态应该是既允许只使用cygwin,也允许混合使用cygwinvs的库。通过一个简单的宏进行控制。

顺便发点感慨,虽然原来对libc的内容分类的判断基本准确,但是真正做完移植,才发现原来对libc的认识还是肤浅了一点!真的是不做不知道,一做吓一跳!