Sponsored Content
Full Discussion: Multi-threading
Top Forums Programming Multi-threading Post 302505530 by achenle on Thursday 17th of March 2011 06:41:41 AM
Old 03-17-2011
Using "fprintf( stderr, ... )" will not guarantee that the output from multiple threads won't be mixed together, since any one fprintf() call can make multiple underlying write() calls to the stderr file descriptor.

To get guaranteed non-interleaved output, you have to actually make the write() call on STDERR_FILENO yourself, as Corona688 already stated.

The easiest way to do that is to write your own code, similar to this:

Code:
int printerr( const char *fmt, ... )
{
    char buffer[ 1024 ];
    char *tmp;
    va_list ap;
    int rc;

    va_start( ap, fmt );

    tmp = buffer;
    rc = vsnprintf( tmp, sizeof( buffer ), fmt, ap );

    // must check error BEFORE casting to size_t!
    if ( rc < 0 )
    {
        va_end( ap );
        return( -1 );
    }

    if ( ( ( size_t ) rc ) >= sizeof( buffer ) )
    {
        // account for trailing nul since vsnprintf() return for too-small buffer does not
        rc++;
        // could use malloc(), but it's much slower,
        // and cleanup is much more complicated
        tmp = alloca( ( size_t ) rc );
        rc = vsnprintf( tmp, ( size_t ) rc, fmt, ap );
        if ( rc < 0 )
        {
            va_end( ap );
            return( rc );
        }
    }

    rc = ( int ) write( STDERR_FILENO, tmp, ( size_t ) strlen( tmp ) );
    va_end( ap );
    return( rc );
}

This User Gave Thanks to achenle For This Post:
 

10 More Discussions You Might Find Interesting

1. Programming

Multi threading using posix thread library

hi all, can anyone tell me some good site for the mutithreading tutorials, its application, and some code examples. -sushil (2 Replies)
Discussion started by: shushilmore
2 Replies

2. Programming

Multi-threading questions

I've been doing some reading lately about threading (Posix threads) and I'm really curious about a couple things that I've read. I'm not sure if many people here have threading experience, but I thought it would be nice to be able to discuss some questions about it. (For the record, I did... (1 Reply)
Discussion started by: DreamWarrior
1 Replies

3. Programming

Multi threading using fork

Hi, I have written a code which will run a set of process using fork. I want to know from You how can i start another job when one of my job in my loop is completed My code is #include<stdio.h> #include<ctype.h> main() { int pid,cid; ChildProcess(); ... (1 Reply)
Discussion started by: sureshraju_ma
1 Replies

4. Programming

Regarding Multi-Threading

Hi All, Here's my question I have a 385 MB file containing 5,000,000 records. I need to read from the file and load into a table. Initially i thought of doing it in a single thread (execution of a single program) but when calculated accounted 16 hours of time on a standard benchmark. Hence... (5 Replies)
Discussion started by: matrixmadhan
5 Replies

5. Programming

Multi threading?

I am not sure if multi threading is the correct term, but here is what I am trying to do. I have a while loop that displays the number 1, pauses, displays the number 2, pauses , displays the number 3 ad infinitum. It just keeps counting. While the screen displays the sequence of numbers counting... (4 Replies)
Discussion started by: enuenu
4 Replies

6. Programming

Multi-threading-- calling same function through different threads

Sir, Can I call same function in the start routines of different Threads. I have created two different threads....and wanna call same function from both threads....is it possible??? Also can I fork inside a thread??? (1 Reply)
Discussion started by: arunchaudhary19
1 Replies

7. Programming

Multi-threading

Hi, If we create 10 threads to invoke runQuery method at same time, Will queryProcessor will be overriden sometime or 10 different copies will be created? We are not using any sunchronzation mechnism in runQuery(). so there is not gurantee on QueryProcessor class variables right OR each 10... (1 Reply)
Discussion started by: jramesh1
1 Replies

8. UNIX for Dummies Questions & Answers

Confusion over Multi Threading

Hi, I am trying to get my head round Multi Threading and I have a few queries to try and clear up my confusion Q1. Is multi threading a hardware / chip level concept, an OS level or an application level concept ? I am trying to work out where SMT architecture fits in. Q2. What's the multi... (3 Replies)
Discussion started by: jimthompson
3 Replies

9. UNIX for Beginners Questions & Answers

Does UNIX support multi-Threading ?

Not just background process running ... but im looking if unix has any multi-threading concept like in Java, C# ... if not present, can you pls share the nearest feature in unix that is close to multi-threaded concept (3 Replies)
Discussion started by: i4ismail
3 Replies

10. UNIX for Beginners Questions & Answers

Multi threading in UNIX

Hi, Can we apply multi threading in Unix. I am using bash shell. We have a generic script to load the data to table based on file input. For each file there is an individual table to load. For each file found in directory I want to load the data in parallel to target table using ... (3 Replies)
Discussion started by: vedanta
3 Replies
vprintf(3C)						   Standard C Library Functions 					       vprintf(3C)

NAME
vprintf, vfprintf, vsprintf, vsnprintf - print formatted output of a variable argument list SYNOPSIS
#include <stdio.h> #include <stdarg.h> int vprintf(const char *format, va_list ap); int vfprintf(FILE *stream, const char *format, va_list ap); int vsprintf(char *s, const char *format, va_list ap); int vsnprintf(char *s, size_t n, const char *format, va_list ap); DESCRIPTION
The vprintf(), vfprintf(), vsprintf() and vsnprintf() functions are the same as printf(), fprintf(), sprintf(), and snprintf(), respec- tively, except that instead of being called with a variable number of arguments, they are called with an argument list as defined in the <stdarg.h> header. See printf(3C). The <stdarg.h> header defines the type va_list and a set of macros for advancing through a list of arguments whose number and types may vary. The argument ap to the vprint family of functions is of type va_list. This argument is used with the <stdarg.h> header file macros va_start(), va_arg(), and va_end() (see stdarg(3EXT)). The EXAMPLES section below demonstrates the use of va_start() and va_end() with vprintf(). The macro va_alist() is used as the parameter list in a function definition, as in the function called error() in the example below. The macro va_start(ap, parmN), where ap is of type va_list and parmN is the rightmost parameter (just before ...), must be called before any attempt to traverse and access unnamed arguments is made. The va_end(ap) macro must be invoked when all desired arguments have been accessed. The argument list in ap can be traversed again if va_start() is called again after va_end(). In the example below, the error() arguments (arg1, arg2, ...) are passed to vfprintf() in the argument ap. RETURN VALUES
Refer to printf(3C). ERRORS
The vprintf() and vfprintf() functions will fail if either the stream is unbuffered or the stream's buffer needed to be flushed and: EFBIG The file is a regular file and an attempt was made to write at or beyond the offset maximum. EXAMPLES
Example 1: Using vprintf() to write an error routine. The following demonstrates how vfprintf() could be used to write an error routine: #include <stdio.h> #include <stdarg.h> . . . /* * error should be called like * error(function_name, format, arg1, ...); */ void error(char *function_name, char *format, ...) { va_list ap; va_start(ap, format); /* print out name of function causing error */ (void) fprintf(stderr, "ERR in %s: ", function_name); /* print out remainder of message */ (void) vfprintf(stderr, format, ap); va_end(ap); (void) abort(); } ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ |MT-Level |See below. | +-----------------------------+-----------------------------+ The vprintf() and vfprintf() functions are MT-Safe. The vsprintf() and vsnprintf() functions are Async-Signal-Safe. SEE ALSO
printf(3C), attributes(5), stdarg(3EXT), attributes(5), standards(5) NOTES
The vsnprintf() return value when n = 0 was changed in the Solaris 10 release. The change was based on the SUSv3 specification. The previ- ous behavior was based on the initial SUSv2 specification, where vsnprintf() when n = 0 returns an unspecified value less than 1. SunOS 5.10 29 Mar 2004 vprintf(3C)
All times are GMT -4. The time now is 09:06 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy