__dirstream 是啥,在哪里可以找到定义
Posted
技术标签:
【中文标题】__dirstream 是啥,在哪里可以找到定义【英文标题】:what is __dirstream, where can we find the definition__dirstream 是什么,在哪里可以找到定义 【发布时间】:2013-05-29 10:27:52 【问题描述】:正如我们在dirent.h
中看到的,有一个typedef:
typedef struct __dirstream DIR;
它说它对用户是不透明的。而且我们甚至在 gcc 头文件中也找不到它,__dirstream
结构定义只能在 glibc 源代码中找到。我想知道为什么这个结构必须是不透明的(我认为说它阻止用户直接引用是不合理的,可能我错了)?有什么收获?
【问题讨论】:
它是不透明的,因此库的用户无法在其中随意查找值。 @H2CO3 但是如果你真的想要,你可以将 glibc 中的定义复制到你的程序中,它实际上并没有阻止任何事情。而且我认为隐藏结构以防止随意修改不是一个好主意,我认为在手册上告知用户就足够了。 你可以,当然没有什么可以阻止的,但是大多数用户甚至无法谷歌glibc的源代码在哪里:P 在编程中,没有什么是不可能的,这不是这样实现的因为如果你这样做,地球就会爆炸,这只是那一小块安全屏障,可以防止拿着枪的猴子在里面乱搞内部结构。 【参考方案1】:您可以找到实际的定义here,但正如已经指出的那样,您不应该直接访问它。
它可以在标准库的实现(或同一库的不同版本)之间随机更改,这就是它被隐藏的原因。
您关于“通知用户”的评论有点……我不知道,这是一个非常乐观的前景。隐藏定义使得滥用它变得更加困难,这反过来又使得编写违反规范并包含毫无意义的脆弱代码的程序变得更加困难。那是一件好事;你会发现很多软件工程都致力于阻止程序员做他们不应该做的事情。
这又不一定是因为“所有程序员都是愚蠢的”,至少我不是这样解释的,而是因为典型软件系统的复杂性非常非常高,尽可能减少它是有益的。信息隐藏是降低系统特定位置复杂性的一种方法。
【讨论】:
是的,我明白你在说什么,恕我直言,这就像 oo 编程。我只是怀疑可能有其他原因……但如果是原因,我可以理解。 @dspjm 我和你有同样的问题(我只是好奇它的结构,没有真正的理由需要知道),我有一个重要的认识:如果你不够专业找到结构的定义,你不够专业,无法使用它。 :)以上是关于__dirstream 是啥,在哪里可以找到定义的主要内容,如果未能解决你的问题,请参考以下文章
statdirentDIRpasswdspwdtm结构体简述
statdirentDIRpasswdspwdtm结构体简述
modlib3.c:21:9:错误:不完整 typedef 'DIR aka struct _dirstream 的使用无效