【问题标题】:[C][Stat][Fileinfo] Why is st_mode defined as something not in structure, when I use the stat() call to return a structure?[C][Stat][Fileinfo] 当我使用 stat() 调用返回结构时,为什么 st_mode 被定义为不在结构中的东西?
【发布时间】: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。或者:声明bufstruct stat buf;,并将其地址传递给statstat(fn, &buf);
  • 哇,谢谢!为什么会这样?假设我有一个类似char data 的节点结构。乍一看,我认为node->datanode.data 是相同的。 struct stat 有什么区别?
  • 当你直接处理struct(或union)时使用点.,例如当你有struct something node;时。内箭头 node->data(*node).data 的缩写,因此 node 需要是一个 指针 指向 struct(或 union),例如当你有struct something * node;.
  • 我明白了!感谢您的澄清!

标签: c struct stat


【解决方案1】:

buf 不是struct statbuf 是指向 struct stat 的指针,而指针没有 st_mode 字段。要获取struct statst_mode 字段buf 指向,请使用(*buf).st_mode,或简称buf->st_mode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多