Linux与Windows利用ext3共享数据
这里讨论的方法主要解决以下问题:
1、通常只能以fat区共享数据(NTFS写不安全)
2、但在Linux下访问fat区,不能有全为大写的文件名,导致程序开发时需要的诸如AUTHORS、README、NEWS等文件变成不规范的小写形式,更严重的是CVS目录变成了cvs!
3、但在Linux下访问fat区,无法建立符号链,导致程序开发时autoconf、automake无法执行
4、但在Linux下访问fat区,由于没有“x”标志,所有文件都统统具有了执行标志;
所以考虑用Linux下的文件系统作为共享区,在Windows下装对应的驱动。ReiserFS的Windows驱动不成熟,几乎每次都导致WindowsXP蓝屏,所以不得不用ext3,找了一个比较稳重的Windows驱动:Ext2IFS,最新版本是1.10b,这样就能把ext3区挂载成为某个盘(比如:D:/)来访问。
新的问题又出现了,Windows默认代码页是GB2312(cp936),而ext3不进行文件名底层转码,也就是说Linux端也必须使用zh_CN.GB2312环境,否则总有一边的中文文件名会是乱码,经过百般尝试,无解。
现在不得已只能把Linux环境设置为zh_CN.GB2312,放弃标准的UTF-8,设置的方法是编辑/etc/locale.gen,将zh_CN GB2312置于文件最后(没有就加上),再运行locale-gen,登录XWindow的时候选择“中文(中国)”即可。
需要注意的问题是,GTK从2.x的某个版本开始默认的底层编码就变成了UTF-8,导致不能正确处理GB2312的文件名,不过设置两个环境变量即可,可编辑/etc/environment文件,在末尾加入如下两行:
G_FILENAME_ENCODING=@locale
G_BROKEN_FILENAMES=1
第一行就不必解释了,地球人一看就知道,加入第二行的原因是,GTK的程序创建中文名文件时不管三七二十一,都使用UTF-8,而不是环境设置的GB2312,所以只能强制它不这样做了!
这样Linux与Windows的数据沟通就畅通无阻了,美中不足的是不得不又退回了GB2312的时代。