[comp.lang.fortran] SunFORTRAN system

mckie@amelia.nas.nasa.gov (William McKie) (07/30/90)

We've got a problem with using calls to the SunFORTRAN 1.2 system( )
library routine (man 3f system) in a program which is redirecting its
stdin from a disk file.  It appears that the shell which is being
forked to execute the command in the character string argument to
system( ) is inheriting the fortran program's stdin, & is consuming
some of the program's standard input, which leads to trouble on later
reads from the stdin.  The following simplified program & its run-time
output demonstrates the problem.  The 'date" command shown below is
just for demo purposes.  In practice, we need to call the system( )
routine with a variety of command strings.  Is there an alternative to
using the fortran system( ) library routine for executing an arbitrary
command line, or a way to force the forked shell to not use the fortran
program's stdin?  We would rather not have to link in C code routines
to accomplish this.  [I noticed that the SunFORTRAN library supports the
fork( ) call, but no exec( ) call.]  We're running SunOS 4.0.3 on a
sparcstation.

Thanks for any suggestions,
-Bill McKie
mckie@sky.arc.nasa.gov


cat syscall.f
      program main
      character*(50) line
      integer system
      do 5100 k=1,2
       istatus = system('date')
       read(5,'(a)') line
       write(6,'(i2,1x,i3,1x,a)') k,istatus,line
 5100 continue
      stop
      end


f77 syscall.f
syscall.f:
 MAIN main:


cat in.data
This is the 1st line of input from stdin.
This is the 2nd line of input from stdin.


a.out <in.data
Sun Jul 29 18:59:25 PDT 1990
 1   0 This is the 1st line of input from stdin.         
Sun Jul 29 18:59:25 PDT 1990
dofio: [-1] end of file
logical unit 5, named 'stdin'
lately: reading sequential formatted external IO
part of last data: rom stdin.^J^?|
Abort (core dumped)