UNIX下大小为1byte的文件——都是换行符(EOL)惹得祸

来源:互联网 发布:三国志12网络对战 编辑:程序博客网 时间:2024/05/16 08:49

某同事用tcl和ksh写了一个程序,利用进行某项操作,如有错误就将错误信息写入某个文件中,写入方法是 2>$stderr,然后判断该文件的大小,如果大于0,则认为有错误发生,报错。

 

奇怪的是该程序一直不能成功执行,一直报错。同事逐行追踪他的代码,结果发现文件$stderr刚创建时大小为0,可过一会之后自己就会变成1byte. 然而打开查看时,该文件内容却是空的。后来用vi按照16进制打开(:%!xxd),发现了0a。

 

0x0a是UNIX下默认的行结束符(EOL),每行都会有的。我们试验了一下,凡是用print在UNIX下创建一个文件:

 

其中$test为未定义的变量,则会生成一个大小为1byte的文件。打开文件,也能发现0a的存在。

 

可是如果是用C语言编写一个文件操作的函数,却能得到一个大小为0而打开后也有0a的文件。很是奇怪……

 

原创粉丝点击