The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM


High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Problem with Mail command: exec failed. errno=2. hawkman2k UNIX for Dummies Questions & Answers 1 04-29-2008 06:50 AM
CRITICAL 11/08/05 12:06:26 _getsockopt reports error. errno: 239 niks.20 High Level Programming 0 11-14-2005 10:25 AM
errno pb dts High Level Programming 3 08-06-2004 06:51 AM
login error after sys-unconfig, errno = 13 roing UNIX for Dummies Questions & Answers 14 02-08-2004 08:25 AM
Getting errno in a Multithreaded program S.Vishwanath High Level Programming 2 03-25-2002 06:58 AM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1  
Old 11-11-2006
Registered User
 

Join Date: Nov 2006
Posts: 23
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.
Reply With Quote
Forum Sponsor
  #2  
Old 11-11-2006
Registered User
 

Join Date: Feb 2006
Location: Schenectady, NY
Posts: 130
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)
Reply With Quote
  #3  
Old 11-11-2006
Registered User
 

Join Date: Nov 2006
Posts: 23
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.
Reply With Quote
  #4  
Old 11-11-2006
Registered User
 

Join Date: Feb 2006
Location: Schenectady, NY
Posts: 130
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.
Reply With Quote
  #5  
Old 11-11-2006
Registered User
 

Join Date: Nov 2006
Posts: 23
Hi!

Thank you!got it.
Reply With Quote
  #6  
Old 11-11-2006
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,616
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.
Reply With Quote
  #7  
Old 11-11-2006
Registered User
 

Join Date: Nov 2006
Posts: 23
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!
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools
Display Modes




All times are GMT -7. The time now is 07:09 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0