Re: Calling a Command line tool from an application
Re: Calling a Command line tool from an application
- Subject: Re: Calling a Command line tool from an application
- From: Dave Rehring <email@hidden>
- Date: Tue, 12 Apr 2005 16:37:56 -0700
On 4/12/05 3:40 PM, Kevin Harris at email@hidden wrote:
> Tommy Nordgren wrote:
>
>>
>> Apr 11, 2005 kl. 11:26 PM skrev Justin Walker:
>>
>>>
>>> On Apr 11, 2005, at 14:17, Rick Steele wrote:
>>>
>>>> Can anybody point me to docs which explain calling a command line
>>>> tool from an application an providing it argumetns?
>>>
>>>
>>> There are two ways to do it:
>>> - the low-level API "exec(3)" will give you several ways to exec
>>> a program, with or without both command-line arguments and
>>> environment variables
>>> - system(3) will take a string that represents a command + arguments,
>>> and figure out how to call the appropriate exec system call
>>>
>>> The latter has fallen into disrepute due to the potential for
>>> security problems, so I would recommend the former, especially if you
>>> plan on distribute the software to others.
>>>
>>
>> There is one caveat of using exec. It will actually REPLACE your
>> application process with the command line tool process. To work around
>> this it is necessary to also use the
>> fork call, which will create a duplicate application process.
>
> There are other issues to consider as well. Signal masks, file
> descriptors (if the close-on-exec flag is not set), etc. will all be
> inherited by the executed process. It may be necessary to reset the
> signal masks and close those files in the child process after doing the
> initial fork. If the output of the program is required, a pipe will
> need to be created to read(2) stdout from the child process. Things
> become even more hairy if you want the parent process to terminate the
> child after some maximum delay time.
>
> In any case, the man pages for fork(2), pipe(2), close(2), dup2(2),
> exec(3), and wait(2) should all come in handy. For twiddling the
> close-on-exec behavior, the fcntl(2) man page (F_GETFD and F_SETFD) will
> also be useful. You can check
> http://www.opengroup.org/onlinepubs/009695399/ for more information
> about each of these system calls; there are some things documented there
> that you may not catch in the man pages.
>
> It will likely be MUCH easier to search for a library that handles all
> of the gory details for you.
>
> -Kevin-
Am I misunderstanding the problem, but the NSTask Objective-C class seems
exactly on point. It should even be usable if the person is doing
development using Carbon... It should be WAY easier than any of the other
methods described here.
Later,
--
David Rehring Psychos do not explode when light hits
VP of Research and Development them, no matter how crazy they are...
Atimi Software, Inc.
www.atimi.com And totally insane guy!
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden