【发布时间】:2015-11-19 07:36:42
【问题描述】:
我正在尝试使用返回的stat 结构中的st_mode,我通过以下方式调用stat();
char *fn = "test.c"
struct stat *buf = malloc(sizeof(stat));
stat(fn,buf);
if(S_ISREG(buf.st_mode))
{
printf("this file is a regular file..."); //if regular
}
当我尝试编译此代码时,我收到以下错误:
server1.c: In function ‘main’:
server1.c:223:32: error: request for member ‘st_mode’ in something not
a structure or union
if(S_ISREG(fileData.st_mode))
^
为什么会出现这个编译错误?我自己似乎找不到太多信息..
【问题讨论】:
-
buf是指向struct stat的指针,因此您需要buf->st_mode。或者:声明buf:struct stat buf;,并将其地址传递给stat:stat(fn, &buf);。 -
哇,谢谢!为什么会这样?假设我有一个类似
char data的节点结构。乍一看,我认为node->data和node.data是相同的。struct stat有什么区别? -
当你直接处理
struct(或union)时使用点.,例如当你有struct something node;时。内箭头node->data是(*node).data的缩写,因此node需要是一个 指针 指向struct(或union),例如当你有struct something * node;. -
我明白了!感谢您的澄清!