• 主页
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux

LINUX C中DIR结构的长度?

刘爱贵 全栈工程师  2006-04-16 09:29:45
LINUX C 中DIR结构是这样定义的:
struct __dirstream
{
void *__fd; /* `struct hurd_fd' pointer for descriptor. */
char *__data; /* Directory block. */
int __entry_data; /* Entry number `__data' corresponds to. */
char *__ptr; /* Current pointer into the block. */
int __entry_ptr; /* Entry number `__ptr' corresponds to. */
size_t __allocation; /* Space allocated for the block. */
size_t __size; /* Total valid data in the block. */
__libc_lock_define (, __lock) /* Mutex lock for this structure. */
};

typedef struct __dirstream DIR;

可是我在程序中获取中长度时总是出错:
printf("size_DIR = %d\n", sizeof(DIR));

出错信息:sizeof applied to an incomplete type

为什么呢?试了半天了,没有成功
...全文
729 点赞 收藏 11
写回复
11 条回复
fierygnu 2006年04月18日
这不是搞清楚了:(
sourceid说的才是对的:)
回复 点赞
刘爱贵 2006年04月18日
搞清楚了,原来DIR是一个流,链表指针,readdir时返回一个dirent结构。
而stream是不能获取长度的。

谢谢楼上各位,结贴
回复 点赞
刘爱贵 2006年04月18日
DIR 本身就是一个指针类型了,这个定义我是google来的。

我sizeof(DIR)的原因是:我在服务端获取目录(opendir, readdir, closedir),然后返回给客户端,所以需要获取size以分配存储空间。

大家看看还有什么方法可以获取DIR的size呢?
回复 点赞
fierygnu 2006年04月17日
包含了声明,没包含定义。
回复 点赞
YanDong_8212 2006年04月17日
没包含头文件,好象应该是报undefine symbol.
回复 点赞
alaiyeshi 2006年04月17日
同上
回复 点赞
sourceid 2006年04月17日
这个dirstream.h没有在/usr/include/里定义.
回复 点赞
x86 2006年04月17日
看了一下,DIR并不是一个需要sizeof操作的结构,它只是一个类似于FILE的结构。
而且其具体定义对用户来讲是透明的,你并不需要对其深入了解。如果一定要用,可以自己重新定义一个__dirstream,然后对__dirstream进行操作。

对了,你找到的定义是在glibc的源码里么?
回复 点赞
x86 2006年04月17日
DIR的定义是一个incomplete type,对于不同的系统其定义不一样。由于是incomplete type,所以你不能用sizeof,你也可以试一下能否定义一个DIR dir而不是DIR* dir?
回复 点赞
刘爱贵 2006年04月17日
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>

这些头文件我都包含了,printf("size_DIR = %d\n", sizeof(DIR));这条简单的语句就是报
sizeof applied to an incomplete type
这样的错
回复 点赞
fierygnu 2006年04月16日
包含头文件了吗?
回复 点赞
发动态
发帖子
Linux/Unix社区
创建于2007-08-27

7069

社区成员

7.3w+

社区内容

Linux/Unix社区 应用程序开发区
社区公告
暂无公告