In article <b9**********************************@d45g2000hsc. googlegroups.com>,
Alexander Mahone <sa******************@gmail.comwrote:
>Hello, apart from using fork() and exec*(), or system(), is there any
other way to run the gperf command line program inside a C program?
Note that C does not define fork() or exec*(), only system().
>I
need to generate at run-time a perfect hash function, and it seems
that gperf has no API to execute it programmatically, so the only way
is to call it as an external program, and instruct it to write the
ouput code to a certain file whose path I know.
Which system() should do fine for.
Anything beyond system() is system-specific.
[OT]
Based upon your reference to fork() and exec*(), it looks like you
might be using a POSIX type system. If so, then -possibly-,
depending on your system architecture and how exactly gperf was
compiled, you -might- be able to use operating system facilities to
request that gperf be loaded -as if- it were a dynamic library,
find it's entry point, and dispatch to that. Common facility
names that might give this kind of access are dlopen() and dlsym().
You might or might not be able to find a symbol within the program
that gives you a callable API; if not, then you would still have
to create command line arguments, possibly use dup2() or similiar
OS facilities do feed the program with internal streams instead of
creating a real file...
On the other hand, the kinds of systems that tend to make hacks
like the above possible, usually have ways of "pre-linking"
programs: in such cases, the speed difference between the hack I
mentioned vs invocation via system() is probably close to unmeasurable.
--
"It's a hard life sometimes and the biggest temptation is to let
how hard it is be an excuse to weaken." -- Walter Dean Myers