Running a program (gperf) inside another C program

Discussion in 'C Programming' started by Alexander Mahone, May 26, 2008.

  1. 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? 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.
    Thanks a lot
     
    Alexander Mahone, May 26, 2008
    #1
    1. Advertising

  2. Alexander Mahone

    Flash Gordon Guest

    Alexander Mahone wrote, On 26/05/08 14:41:
    > 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? I


    In standard C the only method is system(), anything else is system
    specific, so I suggest asking in comp.unix.programmer.

    > 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.
    > Thanks a lot


    A better method almost certainly is to either find or write a library
    that does what you want. If you search the group you will find that
    hashing has been discussed several times here. Alternatively a simple
    google search for "perfect has library" without the quotes shows some
    options.
    --
    Flash Gordon
     
    Flash Gordon, May 26, 2008
    #2
    1. Advertising

  3. In article <>,
    Alexander Mahone <> wrote:
    >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
     
    Walter Roberson, May 26, 2008
    #3
  4. Flash Gordon <> writes:
    [...]
    > A better method almost certainly is to either find or write a library
    > that does what you want. If you search the group you will find that
    > hashing has been discussed several times here. Alternatively a simple
    > google search for "perfect has library" without the quotes shows some
    > options.


    You mean "perfect hash library", yes?

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, May 26, 2008
    #4
  5. Alexander Mahone

    Flash Gordon Guest

    Keith Thompson wrote, On 26/05/08 19:33:
    > Flash Gordon <> writes:
    > [...]
    >> A better method almost certainly is to either find or write a library
    >> that does what you want. If you search the group you will find that
    >> hashing has been discussed several times here. Alternatively a simple
    >> google search for "perfect has library" without the quotes shows some
    >> options.

    >
    > You mean "perfect hash library", yes?


    Yes, thank you.
    --
    Flash Gordon
     
    Flash Gordon, May 26, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. nail
    Replies:
    0
    Views:
    1,546
  2. Peter Nolan
    Replies:
    4
    Views:
    11,010
    E. Robert Tisdale
    Apr 8, 2004
  3. Replies:
    1
    Views:
    475
    Walter Roberson
    Aug 12, 2005
  4. Lorenzo Bettini
    Replies:
    3
    Views:
    622
    Lorenzo Bettini
    Sep 24, 2005
  5. Laurent Verweijen

    Running a program from another program.

    Laurent Verweijen, Jun 17, 2010, in forum: Python
    Replies:
    0
    Views:
    250
    Laurent Verweijen
    Jun 17, 2010
Loading...

Share This Page