dram.me

rcsid的用途

在看BSD的代码时,会发现在很多地方都会出现static char rcsid[] = "$OpenBSD ... $"这样的东东,一直不清楚它是做什么用的。

在google上找了好久,总算找到了一个

上面的页面是讲解RCS版本控制系统的,看一下Magic Keywords这一节就可以了。RCS是CVS的前身,不过rcsid的用法没什么改变,所以虽然现在BSD的代码都是用CVS管理了,但还是可以看到rcsid这东东。

通常在BSD的代码中,第一行会有和rcsid字符串差不多的注释。这和rcsid字符串一样,都是由CVS自动生成更新的,主要用来保存文件最后更改的时间、作者等信息。在文件首行加个注释很好理解,而将其放在字符串中则是为了在将文件编译为二进制文件之后依然可以保留这些信息。为此还专门有一个命令来检测这个串,叫ident

另外在代码中还可以看到sccsid,是更早的一个版本控制系统SCCS使用的,不过是被#if 0注释掉了。

再有在NetBSD的代码中还可以看到__COPYRIGHT,它也有类似的作用,用what可以查看这个字符串。