2013-06-03 82 views
3

正如我们在dirent.h看到,有一个typedef:什么是__dirstream,我们在哪里可以找到的定义

typedef struct __dirstream DIR; 

它说,它是不透明的用户。即使在gcc头文件中我们也找不到它,__dirstream结构定义只能在glibc源代码中找到。我想知道为什么这个结构必须是不透明的(我不认为说它阻止用户直接参考,可能我错了)。有什么收获?

+0

这是不透明的,这样图书馆的用户就不能在它周围捅破随机值。 – 2013-06-03 09:45:21

+0

@ H2CO3但是,如果你真的想,你可以将glibc中的定义复制到你的程序中,但它实际上并没有阻止任何东西。而且我不认为隐藏结构以防止随机修改是一个好主意,我认为在手册上通知用户就足够了。 – dspjm

+0

你当然可以做任何事情都不能阻止,但大多数用户甚至不能在谷歌的源代码glibc是:在编程中,没有什么是不可能的,这不是如此实现,因为地球爆炸,如果你做这只是一个小小的安全屏障,它可以防止那些有枪支的猴子在那里乱搞内部结构。 – 2013-06-03 09:51:00

回答

3

你可以找到实际的定义here,但正如你已经指出,你不应该直接访问它。

它可以在标准库的实现(或同一库的不同版本)之间随机更改,这就是隐藏它的原因。

你对“告知用户”足够的评论有点......我不知道,这是一个非常乐观的前景。隐藏该定义使得滥用它变得更难,这反过来又使得编写违反规范并包含无意义的脆弱代码的程序变得更加困难。这是一件好事;你会发现很多软件工程都致力于试图阻止程序员做他们不应该做的事情。

这反过来并不一定是因为“所有的程序员都是愚蠢的”,至少这不是我的解释,而是因为典型软件系统的复杂性非常高,只要可能就尽量减少它。信息隐藏是降低系统中某个特定位置复杂性的一种方法。

+0

是的,我明白你在说什么,恕我直言,这就像oo编程。我只是怀疑可能有其他原因......但如果是原因,我可以理解这一点。 – dspjm

+0

@dspjm我和你有同样的问题(我只是好奇它的结构,没有真正的理由需要知道),我有一个重要的认识:如果你没有足够的专家来找到结构的定义,你没有足够的专家来使用它。 :) –

相关问题