Hi errno in sys/stat.h


 
Thread Tools Search this Thread
Top Forums Programming Hi errno in sys/stat.h
# 1  
Old 11-11-2006
Hi errno in sys/stat.h

How should I use errno in a c program and what info does it have .
I am working with directories and files.
So can any one tell me How to access errno?I am using the stat() function on \etc directory and I am alble to access only the half of the directories.I am not able to access other half and stat()call returns a -1.So what is wrong?
Thanks in advance. Smilie
# 2  
Old 11-11-2006
Using the system errno is very important in C programming. All system calls will tell you there is an error by returning a -1, or NULL, or EOF, but only the errno variable, which is set by the system can tell you what the error is. To use it in a program, you need simply include the errno header file and define it as an external int.

Code:
#include <stdio.h>
#include <errno.h>

    extern int        errno;

int main ( int argc , char * const argv [ ] , char * const envp [ ] )
{
    return (0);
}

You can also get a textual description using the perror(3C) function.

Code:
#include <stdio.h>
#include <errno.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>

    extern int        errno;


int main ( int argc , char * const argv [ ] , char * const envp [ ] )
{
    char *          cpString = "/file/that/is/not/there";
    struct stat     Status;

    if ( stat (cpString, &Status) == -1 )
    {
        perror (cpString);
    }

    return (0);
}

# ./a.out
/file/that/is/not/there: No such file or directory

A little function I use in most of my programs for displaying system error messages follows. It uses the string function strerror(3C) to display a text message for any given errno value.

Code:
#include <stdio.h>
#include <errno.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>

    extern int        errno;


    int syserr ( const char Format [ ] , char * S1 , char * S2 )
    {
        fprintf (stderr, Format, ( S1 ? S1 : "" ), ( S2 ? S2 : "" ));
        fprintf (stderr, " (%d, %s)\n", errno,
                 ( (S1 = strerror (errno)) ? S1 : "undefined error" ));

        return (errno);
    }

    

int main ( int argc , char * const argv [ ] , char * const envp [ ] )
{
    char *          cpString = "/file/that/is/not/there";
    struct stat     Status;

    if ( stat (cpString, &Status) == -1 )
    {
        syserr ("Unable to %s %s", "status", cpString);
    }

    return (0);
}


# ./a.out
Unable to status /file/that/is/not/there (2, No such file or directory)

# 3  
Old 11-11-2006
Hi

Thank you,hegemaro!
So,Can I use it with stat() call?
If it has a integer value ,How can I know which value is which?
Like there are many type of errors that can be generarted like no access permissions etc.So how can a assosiate a particular errno no with a particular type of error.
# 4  
Old 11-11-2006
The values for errno for any system call are defined in the manual pages for that system call. Being an integer, yes, you can test it against any of the constant values as defined in errno.h (actually /usr/include/sys/errno.h under Solaris 8). A code snippet might look like this:

Code:
if ( stat (cpString, &Status) == -1 )
{
    if ( errno == ENOENT )
    {
        fprintf (stderr, "The file doesn't exist\n");
    }
    else if ( errno == ENOPERM )
    {
        fprintf (stderr, "I don't have permission to read that file\n");
    }
    else
    {
        syserr ("Unable to %s %s", "status", cpString);
    }
}

Of course, rather than just writing messages to stderr, you could include code to acutally do something useful.
# 5  
Old 11-11-2006
Hi!

Thank you!got it.
# 6  
Old 11-11-2006
According to the latest Posix Standard:
Quote:
It is unspecified whether errno is a macro or an identifier declared with external linkage. If a macro definition is suppressed in order to access an actual object, or a program defines an identifier with the name errno, the behavior is undefined.
This means that:
extern int errno;
is not legal anymore. You are supposed to include errno.h and depend on that include file to define errno for you. You will get unpredicable behavior if you use the external variable in a multi-threaded process.
# 7  
Old 11-11-2006
Perderabo,Than you!
I want to use it to know whether stat() call functions in a way desired or if it
exited with an error then what made it exit.
I will try your way too.Thank you!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Errno.h symbols

Hi, I need to look at a recent copy of /usr/include/errno.h from AIX 7.2 to check some symbols. In particular, I'm curious if it defines EOWNERDEAD and ENOTRECOVERABLE. Can someone who has access to 7.2 please check for me? Thanks! (1 Reply)
Discussion started by: topcat
1 Replies

2. Programming

Interactive Python 3.5+ sys.stdout.write() AND sys.stderr.write() bug?

(Apologies for any typos.) OSX 10.12.3 AND Windows 10. This is for the serious Python experts on at least 3.5.x and above... In script format sys.stdout.write() AND sys.stderr.write() seems to work correctly. Have I found a serious bug in the interactive sys.stdout.write() AND... (2 Replies)
Discussion started by: wisecracker
2 Replies

3. Linux

[Errno 256] No more mirrors to try.

Dear all, CentOS 6 After executing "yum update -y" command I am facing this error. Please help me out. thanks in advance. Full error & error code is given as follow: ... (7 Replies)
Discussion started by: saqlain.bashir
7 Replies

4. Solaris

How to resolve error "INIT: Cannot stat /etc/inittab, errno: 2"

Hi All, I am getting an error message when I execute command “zlogin -C sunsrv4z5” on my root server. INIT: Cannot stat /etc/inittab, errno: 2 INIT: Cannot stat /etc/inittab, errno: 2 As per my analysis it seems that some files inside /etc folder are deleted. This server was... (14 Replies)
Discussion started by: surbhit4u
14 Replies

5. Programming

Open function of sys/stat.h

If a process already has the entire file locked for read and write using newstruct.l_type = F_WRLCK; what would happen if another process would try to open it in read only mode using open(filename, O_RDONLY); ? I want to check if the file exists and I want it to work even if another process has... (4 Replies)
Discussion started by: cyler
4 Replies

6. Programming

does perror() set errno?

here the program gives a odd result: #include <stdio.h> int main(){ perror("first"); perror("next"); return 0; } result: first: Success next: Illegal seek why? any resonable explanation? i found no information about this in man pages. thanks in advance (2 Replies)
Discussion started by: ebd
2 Replies

7. Programming

errno

Hey, Can I assume that for certain function calls, errno can never be set to a certain value. More specifically, can I assume that for if the stat function call fails, the errno can never be or "No space left on device." I am assuming that a read function cannot fail because of no space... (5 Replies)
Discussion started by: the_learner
5 Replies

8. Programming

errno pb

Hello, I need to make a lib with pthread, when I run my make file all is good. But when I run my test program, I test errno in the begining and is already set to 251. Is it normal ??? What can I modify in my Makefile to have errno set to 0 ??? Thanks $make gcc -D_REENTRANT -shared -fpic... (3 Replies)
Discussion started by: dts
3 Replies

9. UNIX for Dummies Questions & Answers

login error after sys-unconfig, errno = 13

Hi, I have a SPARCstation 10 with SunOS 5.6 This erlier was in a network and now I have it at home to make a webserver. At fist there was NIS and things left from erlier. So the "Console login:" newer appered only the white window with sun logo topleft and some text info. I made... (14 Replies)
Discussion started by: roing
14 Replies

10. Programming

Getting errno in a Multithreaded program

In Tru64 Unix, the 'errno' variable is not thread safe. Could anybody help me about how to make it thread safe or how to check 'errno' in a Multithreaded program ???? The Programming process is like this. There are some definite number of threads having their own task. There is one... (2 Replies)
Discussion started by: S.Vishwanath
2 Replies
Login or Register to Ask a Question