> > I was testing a program and to see how it handled an invalid group I did: > > gr = getgrnam("bob"); > > Now obviously this failed. However the string from perror() states: > > "Could not find file or directory" > > Why is this? Seems like a counter intuitive error.
I think the error is not set by getgrnam(). If I run ------------------------------------------------------------------------ #include <stdio.h> #include <stdlib.h> #include <grp.h> int main(void) { struct group* gr; perror("before"); gr = getgrnam("tgakem"); perror("after"); return 0; } ------------------------------------------------------------------------ it always prints before: Success after: No such file or directory It makes no difference if "tgakem" exists (which it happens to do) or if it doesn't. My guess is that getgrnam tries to look for group descriptions in several files, of which at least one does not exist. If I run the above program with strace (strace ./prg) and grep for `open', I get open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib/libc.so.6", O_RDONLY) = 3 open("/etc/nsswitch.conf", O_RDONLY) = 3 open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib/libnss_compat.so.1", O_RDONLY) = 3 open("/lib/libnsl.so.1", O_RDONLY) = 3 open("/lib/libnss_files.so.1", O_RDONLY) = 3 open("/etc/group", O_RDONLY) = 3 As you can see the first file could not be opened. I checked and it indeed does not exist on my system, so that will have triggered the error message. The getgrnam function returns NULL on failure, and apparently does not manipulate errno. HTH, Eric -- E.L. Meijer ([EMAIL PROTECTED]) Eindhoven Univ. of Technology Lab. for Catalysis and Inorg. Chem. (SKA)