home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
doscall.zip
/
dospawn.c
< prev
Wrap
C/C++ Source or Header
|
2000-10-15
|
1KB
|
51 lines
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
static char Buf[ 500 ];
int main( int argc, char *argv[] )
{
int n, pipe;
char *p = argv[ 1 ];
if ( argc != 2 | strlen( p ) != 18 )
{
fprintf( stderr, "\nstart %s in OS/2", argv[0] );
return 1;
}
for ( n = 0; n < 3; ++n )
{
*( p + 17 ) = n + '0';
if ( n )
pipe = open( p, O_BINARY | O_WRONLY );
else pipe = open( p, O_BINARY | O_RDONLY );
if ( dup2( pipe, n ) == -1 ) abort();
}
for ( n = 3; n <= pipe; ++n ) close( n );
if ( read( 0, &n, 2 ) != 2 || n <= 0 || sizeof Buf <= n
|| read( 0, Buf, n ) != n
|| NULL == ( p = strtok( Buf, " \t" )))
{
sprintf( Buf, "\nunexpected arg.s (%d)", n );
write( 2, Buf, strlen( Buf )); n = -2;
}
else n = spawnlp( P_WAIT, p, p, strtok( NULL, "" ), NULL );
if ( n == -1 )
{
strcat( strcat( p, ": " ), strerror( errno ));
write( 2, p, strlen( p )); n = errno;
}
Buf[ 0 ] = 0; Buf[ 1 ] = n;
write( 2, Buf, 2 ); return n;
}