Joe*_*oey 7 shell shell-script
我想知道你是如何确定脚本/文件的结尾的? 我对旧的 Unix 版本(如 V6)特别感兴趣。
最后一个写入的字符后是否有“\0”?
Bru*_*ger 12
更旧的 Unix 下的用户空间程序在文件末尾看不到“填充”字节。我知道 MS-DOS 或 CP/M 会用 Ctrl-Z 字符填充磁盘块,因此文件读取算法不仅必须检查磁盘块末尾,还必须检查填充字节。
Unix 从来没有做过那种事情。程序读取字节直到文件结束条件发生,这对于read(2)系统调用意味着返回 0。不幸的是,长时间运行的系统调用可能会被中断,这会导致read()返回错误代码 (-1),并且全局符号errno计算到 EINTR,所以 Unix 传统上也会在读取某些设备时引入一些愚蠢的行为。
这还有一个文件系统方面:Unix 文件系统会将数据放入磁盘块中,并在 inode 中保留一个文件大小以字节为单位的值。其他一些操作系统仅以块为单位保留文件大小。如果数据小于一个块,问题就会冒泡到用户空间,填充字节或其他废话。