Unix Programming - Re: fork/exec vs system

This is Interesting: Free IT Magazines  
Home > Archive > Unix Programming > January 2007 > Re: fork/exec vs system





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Re: fork/exec vs system
Rainer Weikusat

2007-01-25, 7:19 am

jt@toerring.de (Jens Thoms Toerring) writes:
> Connie <yeconnie@gmail.com> wrote:
>
> You mean your PERL script will be exec()ed by other (non-Perl)
> programs? Then I guess you shouldn't have to worry too much about
> that, the callers should consider which file descrptors they want
> to leak to an exec()ed program, they shouldn't expect you to do
> their cleaning up.


This isn't a really sensible piece of advice. The callers may just not
care and to point a finger at someone, crying 'thas is his/ her fault!!1'
isn't going to solve an eventual technical problem.

> Mentioning this as a possible problem might be nice - but actively
> closing files is not necessarily the right thing to do. Perhaps
> someone clever actually wants one of the files to be inherited by
> the child process you exec() and why would you keep her or him from
> doing that?


The obvious reply would be 'because I execute the child for a
specific purpose and nobody has any business "clevering around" with
it'. If it applies or not depends on the actual situation (probably
not for a xterm spawning a shell, certainly if running with
elevated privileges to enable someone to do a particular task he/she
would ordinarily not be allowed to do).

>
> I fear that would be rather difficult to do in a portable way.
> I guess you would have to iterate over all possible file des-
> criptor numbers and check for each of them if its an open file.


It is somewhat simpler:

long fd;

fd = sysconf(_SC_OPEN_MAX);
while (fd > 3) close(--fd);

[assuming that STD(IN|OUT|ERR) should remain open]

A better, but not universally portable solution, would be to close
everything > 2 listed in /dev/fd (supported at least by Solaris and
*BSD and indirectly by linux, through symlink /dev/fd ->
/proc/self/fd).

Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com