Why do I have to prefix stat from <sys/stat.h> with the keyword struct?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Rolf =?UTF-8?B?S3LDvGdlcg==?=

    Why do I have to prefix stat from <sys/stat.h> with the keyword struct?

    Hi


    I´m about learning C/C++ and after covering the language basics I´m now
    heading for my first "real" application where I need to use the POSIX stuff
    for directory operations.

    Here´s my problem: The following code compiles and runs as it should inside
    a linux g++ environment using code::blocks IDE. But when I drop
    the "struct" prefix from line 12 "struct stat st;" It doesn´t compile any
    more and it says:

    |12|error: expected `;' before ‘st’
    |12|warning: statement is a reference, not call, to function ‘stat’
    |12|warning: statement has no effect
    |18|error: ‘st’ was not declared in this scope

    Hmm, what´s going on here? Why can I drop "struct" from line 1? IMHO dirent
    is just a struct as stat is. A similar behaviour can be found using the
    cygwin environment under windows, so I guess it has nothing to do with
    system dependent header files.


    Any ideas?
    Thanx in advance
    Rolf



    #include <iostream>
    #include <dirent.h>
    #include <sys/stat.h>
    #include <sys/types.h>

    using namespace std;

    int main() {

    dirent *entry;
    struct stat st;

    DIR *base;
    base = opendir(".");

    while( (entry = readdir(base)) != 0) {
    stat(entry->d_name, &st);
    cout << entry->d_name << " :: " << st.st_mode << endl;
    }

    closedir(base);

    return 0;
    }

  • Ian Collins

    #2
    Re: Why do I have to prefix stat from &lt;sys/stat.h&gt; with the keywordstruct?

    Rolf Krüger wrote:
    Hi
    >
    >
    I´m about learning C/C++ and after covering the language basics I´m now
    heading for my first "real" application where I need to use the POSIX stuff
    for directory operations.
    >
    Here´s my problem: The following code compiles and runs as it should inside
    a linux g++ environment using code::blocks IDE. But when I drop
    the "struct" prefix from line 12 "struct stat st;" It doesn´t compile any
    more and it says:
    >
    |12|error: expected `;' before ‘st’
    |12|warning: statement is a reference, not call, to function ‘stat’
    |12|warning: statement has no effect
    |18|error: ‘st’ was not declared in this scope
    >
    stat is both a struct and a function. Very confusing, but simple to
    disambiguate with 'struct stat'.

    --
    Ian Collins.

    Comment

    • Rolf =?UTF-8?B?S3LDvGdlcg==?=

      #3
      Re: Why do I have to prefix stat from &lt;sys/stat.h&gt; with the keyword struct?

      Hi Ian,
      >Here´s my problem: The following code compiles and runs as it should
      >inside a linux g++ environment using code::blocks IDE. But when I drop
      >the "struct" prefix from line 12 "struct stat st;" It doesn´t compile any
      >more and it says:
      >>
      >|12|error: expected `;' before ‘st’
      >|12|warning: statement is a reference, not call, to function ‘stat’
      >|12|warning: statement has no effect
      >|18|error: ‘st’ was not declared in this scope
      stat is both a struct and a function. Very confusing, but simple to
      disambiguate with 'struct stat'.
      Thank you very much

      I´ve taken more than one close look into the sys/stat.h file ... obviously
      not enough - should have seen this by myself!

      Thanks
      Rolf



      Comment

      Working...