Re: [fpc-pascal] Exec(), Linux, and /dev/null redirection

2010-02-17 Thread Marco van de Voort
In our previous episode, cobines said:
 2010/2/17 Zitt Zitterkopf zittw...@hotmail.com:
  Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + '  /dev/null');
 
 Try:
 
 Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + ' 1/dev/null');
 
 for redirecting STDOUT or
 
 Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + ' 2/dev/null
 1/dev/null');
 
 for redirecting STDOUT and STDERR.

Try
fpsystem

it executes a shell, and  1 2 are shell commands, and won't work with
direct execution commands like exec (which is old anyway, use
executeprocess)

 This puts stdout and stderr into one pipe however. There must be some
 way to read from stdout and stderr separately, maybe using TProcess,
 but I've never needed it so I don't know how.

TProcess is definitely the thing to look at.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] Exec(), Linux, and /dev/null redirection

2010-02-16 Thread Zitt Zitterkopf

I'm cross developing a program in free pascal running FreeVision. When running 
under Linux / Busybox; I'm attempting to mount a device to scan it for a set of 
files. Since I'm running a TUI (Text User Interface); I cannot have the BusyBox 
mount command printing failure information to the screen where it corrupts the 
TUI. The pascal code:

 

Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + '  /dev/null');

 

When running:

 

Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline );

 

I see device busy STDERR messages appear on the screen. However, when I try 
to redirect using the '  /dev/null' it appears as tho the BusyBox executable 
is being passed '  /dev/null' as a parameter and isn't taking it as the 
appropriate redirection command.

 

I tried the following kludge instead:

var

OurPipe: Text;

 

 popen( OurPipe, '/bin/mount /dev/'+ aline +' /media/' + aline, 'R');
 Try
 if (fpgeterrno=0) then Flush (OurPipe)
 ELSE MessageBox ('mount pipe error ' + IntToStr(fpgeterrno), nil,
  mfError or mfOKButton);
 Finally
 PClose( OurPipe );
 END;

 

however, I'm getting an Accessviolation. unsure if I'm even going down the 
right path.

 

Any other suggestions?
  ___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Exec(), Linux, and /dev/null redirection

2010-02-16 Thread cobines
2010/2/17 Zitt Zitterkopf zittw...@hotmail.com:
 Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + '  /dev/null');

Try:

Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + ' 1/dev/null');

for redirecting STDOUT or

Exec( '/bin/mount', '/dev/'+ aline +' /media/' + aline + ' 2/dev/null
1/dev/null');

for redirecting STDOUT and STDERR.

 I tried the following kludge instead:
 var
 OurPipe    : Text;

  popen( OurPipe, '/bin/mount /dev/'+ aline +' /media/' + aline,
 'R');
  Try
  if (fpgeterrno=0) then Flush (OurPipe)
  ELSE MessageBox ('mount pipe error ' + IntToStr(fpgeterrno),
 nil,
   mfError or mfOKButton);
  Finally
  PClose( OurPipe );
  END;

This works for me:

var f: textfile;
s: string;
begin
  if popen(f, '/bin/mount /dev/'+ aline +' /media/' + aline + ' 21',
'r') = 0 then
  begin
readln(f,s);

// test output 's'

pclose(f);
  end
  else
error := fpgeterrno;   // failed
end;

This puts stdout and stderr into one pipe however. There must be some
way to read from stdout and stderr separately, maybe using TProcess,
but I've never needed it so I don't know how.

--
cobines
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal