Sponsored Content
Top Forums Programming Small query regarding function "char * strerror(int errnum)" Post 302762681 by Don Cragun on Tuesday 29th of January 2013 01:32:31 AM
Old 01-29-2013
Quote:
Originally Posted by Praveen_218
John,
I was confused especially after reading the MAN page itself that mentioned of memory location for “unknown error numbers” (which I referred above) but didn't talk of the memory location of the address returned by this system call under normal circumstances.

The primary reason to ask this query is because of the fact that the MAN pages themselves not making me sure if the programmer needs to handle any kind of cleanup post calling strerror()? Just like the call to stat(), lstat(), fstat() which create objects of type struct stat on the heap itself (whose address is returned through the pointer struct stat *sb) and puts the onus of the cleanup on the programmer only.

Available examples too didn't give the clarity as they all called the function strerror() and used the address returned into their processing and were of just few lines only. Hence I was not getting sure of the error handling aspect of the few liner examples.

The code I was working was critical enough not to have scope for silly errors. Hence couldn't have overlooked the cleanup part if the allocation happens to be on the heap and couldn't have just called to free the address either if it belonged to a different memory region.

Hope you got the dilemma making me forward this query to the forum.
If you call strerror(errno), after getting an error indication from a function that sets errno, strerror() will probably return a pointer to a statically allocated string. If you call strerror(random) with a value that is not a valid error number on your system, strerror() may return a pointer to a string like "Unknown error number xxx" where xxx is random converted to a decimal digit string. The application calling strerror() doesn't need to free the memory to which the return value from strerror() points in either case. But, if you intend to call strerror() multiple times and print the results later, you need to allocate space for a buffer to hold the returned string, copy it to that buffer, and free the buffer when you are done with it.
 

8 More Discussions You Might Find Interesting

1. Programming

How to convert the "select" function into a "poll" function

i have a program using the select function but i want to convert it to poll... how can i do this? thanks in advance... :) (1 Reply)
Discussion started by: rbolante
1 Replies

2. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

3. HP-UX

ERROR: more than one instance of overloaded function "vprintf" has "C" linkage

Hi people! I've got this own library: -------------------------------------------- Personal.h -------------------------------------------- #ifdef __cplusplus extern "C" { #endif #include <stdio.h> #include <stdarg.h> #include <string.h> ... (0 Replies)
Discussion started by: donatoll
0 Replies

4. Solaris

significance of "+" char in SunOS "ls -l" output

Hi, I've noticed that the permissions output from "ls -l" under SunOS differs from Linux in that after the "rwxrwxrwx" field, there is an additional "+" character that may or may not be there. What is the significance of this character? Thanks, Suan (6 Replies)
Discussion started by: sayeo
6 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

7. Shell Programming and Scripting

Move a line containg "char" above line containing "xchar"

Okay, so I have a rather large text file and will have to process many more and this will save me hours of work. I'm not very good at scripting, so bear with me please. Working on Linux RHEL I've been able to filter and edit and clean up using sed, but I have a problem with moving lines. ... (9 Replies)
Discussion started by: rex007can
9 Replies

8. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies
strerror(3C)															      strerror(3C)

NAME
strerror, strerror_r - get error message string SYNOPSIS
#include <string.h> char *strerror(int errnum); int strerror_r(int errnum, char *strerrbuf, size_t buflen); The strerror() function maps the error number in errnum to an error message string, and returns a pointer to that string. It uses the same set of error messages as perror(3C). The returned string should not be overwritten. The strerror_r() function maps the error number in errnum to anerror message string and returns the string in the buffer pointed to by str- errbuf with length buflen. Upon successful completion, strerror() returns a pointer to the generated message string. Otherwise, it sets errno and returns a pointer to an error message string. It returns the string "Unknown error" if errnum is not a valid error number. Upon successful completion, strerror_r() returns 0. Otherwise it sets errno and returns the value of errno to indicate the error. It returns the string "Unknown error" in the buffer pointed to by strerrbuf if errnum is not a valid error number. These functions may fail if: EINVAL The value of errnum is not a valid error number. The strerror_r() function may fail if: ERANGE The buflen argument specifies insufficient storage to contain the generated message string. Messages returned from these functions are in the native language specified by the LC_MESSAGES locale category. See setlocale(3C). See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ |MT-Level |Safe | +-----------------------------+-----------------------------+ gettext(3C), perror(3C), setlocale(3C), attributes(5), standards(5) 31 Mar 2005 strerror(3C)
All times are GMT -4. The time now is 06:56 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy