Re: [fpc-pascal] Exec(), Linux, and /dev/null redirection
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
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/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