[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference hydra::axp-developer

Title:Alpha Developer Support
Notice:[email protected], 800-332-4786
Moderator:HYDRA::SYSTEM
Created:Mon Jun 06 1994
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:3722
Total number of notes:11359

3166.0. "CIM Team - Point 19262" by RDGENG::ASAP () Fri Feb 07 1997 05:11

    Company Name :  CIM Team - Point 19262
    Contact Name :  Stefan Felkel
    Phone        :  
    Fax          :  
    Email        :  [email protected]
    Date/Time in :   7-FEB-1997 10:07:56
    Entered by   :  Nick Hudson
    SPE center   :  REO

    Category     :  vms
    OS Version   :  
    System H/W   :  


    Brief Description of Problem:
    -----------------------------

From:	ESSB::ESSB::MRGATE::"ILO::ESSC::dlennon"  7-FEB-1997 09:05:58.62
To:	RDGENG::ASAP,LORDS::SIMON
CC:	
Subj:	POINT No.19262, CIM Team

From:	NAME: ESCTECH@ILO         
	TEL: (822-)6704         
	ADDR: ILO                 <dlennon@ESSC@ILO>
To:	ASAP@RDGENG@MRGATE
CC:	SIMON@LORDS@MRGATE


Hello - 

POINT Log Number	 19262	

Company Name 	CIM Team	
					 	
Engineers name	Stefan Felkel

Telephone Number 		

Fax Number		

E-mail Address	[email protected] 

Operating System, Version	OpenVMS

Platform			Alpha

Problem Statement		

Dear technical support team,


i have problems porting an application from UNIX to VMS.
This application starts an external program like an editor
or a shell script in a new terminal as a subprocess in the
background. The subprocess should inherit the environment
of the calling process. The code looks like that:

#include <stdio.h>

int main( void )
{
    system( "xterm -exec vi &" );
}

When i say create/term ed FILE.TXT on the command line it
does exactly what i want, but if i do a
system( "create/term ed FILE.TXT" ) from a c program it
does not. A system( "create/term/wait ed FILE.TXT" ) works
better but it does not return immediately. So i tried
system( "spawn/nowait create/term/wait ed FILE.TXT" ) but
that doesn't work at all. After i tried many combinations
of spawn and create/term i tried the DECwTermPort routine
but i didn't find a solution for my problem. So i hope you
can help me.

Stefan Felkel ( [email protected] )
CIM-Team Technische Informatik GmbH
Neue Gasse 10
89077 Ulm
ASAP: A60844

-- 
[email protected]

T.RTitleUserPersonal
Name
DateLines
3166.1KZIN::HUDSONThat&#039;s what I thinkFri Feb 07 1997 06:0952
From:	DEC:.REO.REOVTX::HUDSON       "[email protected] - UK Software
Partner Engineering 830-4121"  7-FEB-1997 11:09:07.36
To:	nm%vbormc::"[email protected]"
CC:	HUDSON
Subj:	re:asap q 19262, "system" call to create terminal window

Hello Stefan Felkel,

The "system()" call as implemented on VMS uses the library function "LIB$SPAWN"
to create a subprocess which executes the command.  What you want (as you have
found) is for the subprocess to carry on running in parallel with the parent,
and not to terminate when your main program exits.

The way you can do this is by using LIB$SPAWN with a "NOWAIT" flag (this is the
same as saying "SPAWN/NOWAIT" at the DCL command line).  I have included a
sample program below which does this and I believe gives you the effect you
want.

You can't use "system()" to give you the equivalent of "SPAWN/NOWAIT", because
DEC C uses the "NOWAIT" mechanism itself to track when the subprocess has
completed, and doesn't provide any way for a user program to affect this
behaviour via the "system()" call.  There is no way to override this behaviour
(it's hard coded into the RTL).

Please let me know if this solution is acceptable; if not then perhaps you
could provide some more info as to what solution would be more helpful.

Regards

Nick Hudson
Digital Software Partner Engineering

////////////////// sample program /////////////////

#include <stdio.h>
#include <descrip.h>		// need this for $DESCRIPTOR
#include <lib$routines.h>	// need this for LIB$SPAWN
#include <clidef.h>		// need this for CLI$M_... flags

$DESCRIPTOR(cmd_string,"create/term/wait ed file.txt");

int main(void)
{
	int	stat,flags;

	flags = CLI$M_NOWAIT;
	stat = lib$spawn(
		&cmd_string,		// command to spawn
		0,0,			// input/output - default
		&flags);		// NOWAIT flag
	printf("stat was %d\n",stat);
}
3166.2no complaints, closing this oneKZIN::HUDSONThat&#039;s what I thinkThu Feb 20 1997 05:290