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

 

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

 

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

print $test > test

 

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

 

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