Sponsored Content
Top Forums UNIX for Dummies Questions & Answers How to write code for a Logging Event? Post 302579767 by Corona688 on Tuesday 6th of December 2011 01:29:32 PM
Old 12-06-2011
Would you prefer unexplained crashes?

There's ways to reduce redundancy of course. It's useful that any failed system call, and quite a lot of things in stdio, set errno on error, so the same error routine can be used for many things:
Code:
// Opens a file, reads 'size' bytes from it, returns the data in new memory
void *read_data(const char *filename, int size)
{
        FILE *fp=fopen(filename, "r");
        void *mem=NULL;

        if(fp == NULL)
                goto PREPARE_ERROR;
        if((mem=malloc(size)) == NULL)
                goto PREPARE_ERROR;
        if(fread(mem, 1, size, fp) != size)
                goto PREPARE_ERROR;

        fclose(fp);
        return(mem);

PREPARE_ERROR:
        // fread, malloc, and fopen all set errno on error.
        perror("error in prepare_something:");

        if(mem) free(mem);
        if(fp)      fclose(fp);

        return(NULL);
}

...which just amounts to an extra jump-if instruction or so between function calls. The lion's share of work is done by functions or non-error code. And the benefit of error messages if your program actually does misbehave is enormous.

perror goes to standard error incidentally, so if you redirect FD #2 into a logfile, perror goes there.

Last edited by Corona688; 12-06-2011 at 02:36 PM..
This User Gave Thanks to Corona688 For This Post:
 

5 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

How does Unix write events into event log?

Hi to everyone. I'm new to this forum and also pretty new to Unix. I'm developing a cross-platform software and I need to register informational and error messages into the event log of the system. Under Windows, this is implemented so far, I need to implement it unded Unix by now. I do know that... (7 Replies)
Discussion started by: mariano_donati
7 Replies

2. IP Networking

read/write,write/write lock with smbclient fails

Hi, We have smb client running on two of the linux boxes and smb server on another linux system. During a backup operation which uses smb, read of a file was allowed while write to the same file was going on.Also simultaneous writes to the same file were allowed.Following are the settings in the... (1 Reply)
Discussion started by: swatidas11
1 Replies

3. Shell Programming and Scripting

Event logging to file and display to console | tee command is not able to log all info.

My intention is to log the output to a file as well as it should be displayed on the console > I have used tee ( tee -a ${filename} ) command for this purpose. This is working as expected for first few outputs, after some event loggin nothing is gettting logged in to the file but It is displaying... (3 Replies)
Discussion started by: sanoop
3 Replies

4. Shell Programming and Scripting

Logging success event into file

Hi, I've the following code to log the errors any after the command is executed. # Ksh 88 Version log_path=/home/etc/fls/fls_log.log del_path=/home/etc/fls/to_day rm $del_path/* >> $log_path 2>&1 But I even want to log if the rm command is success without any error along with... (1 Reply)
Discussion started by: smile689
1 Replies

5. Linux

Syslog not logging successful logging while unlocking server's console

When unlocking a Linux server's console there's no event indicating successful logging Is there a way I can fix this ? I have the following in my rsyslog.conf auth.info /var/log/secure authpriv.info /var/log/secure (1 Reply)
Discussion started by: walterthered
1 Replies
PERROR(3)							 Library functions							 PERROR(3)

NAME
perror - print a system error message SYNOPSIS
#include <stdio.h> void perror(const char *s); #include <errno.h> const char *sys_errlist[]; int sys_nerr; DESCRIPTION
The routine perror() produces a message on the standard error output, describing the last error encountered during a call to a system or library function. First (if s is not NULL and *s is not NUL) the argument string s is printed, followed by a colon and a blank. Then the message and a new-line. To be of most use, the argument string should include the name of the function that incurred the error. The error number is taken from the external variable errno, which is set when errors occur but not cleared when non-erroneous calls are made. The global error list sys_errlist[] indexed by errno can be used to obtain the error message without the newline. The largest message num- ber provided in the table is sys_nerr -1. Be careful when directly accessing this list because new error values may not have been added to sys_errlist[]. When a system call fails, it usually returns -1 and sets the variable errno to a value describing what went wrong. (These values can be found in <errno.h>.) Many library functions do likewise. The function perror() serves to translate this error code into human-readable form. Note that errno is undefined after a successful library call: this call may well change this variable, even though it succeeds, for example because it internally used some other library function that failed. Thus, if a failing call is not immediately followed by a call to perror, the value of errno should be saved. CONFORMING TO
ANSI C, BSD 4.3, POSIX, X/OPEN SEE ALSO
strerror(3) 2001-12-14 PERROR(3)
All times are GMT -4. The time now is 09:55 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy