LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   Is there something like ShellExecute in linux?? (https://www.linuxquestions.org/questions/programming-9/is-there-something-like-shellexecute-in-linux-213725/)

cppkid 08-05-2004 06:53 AM

Is there something like ShellExecute in linux??
 
I am porting a windows application written in VC++ to linux that uses a function ShellExecute to perform an operation on a file, Can anybody tell me the alternative in linux C++, I also want to open some document from my program as with ShellExecute in Windows.

penguin4 08-05-2004 07:31 AM

cppkid; am assuming you are not unfamilar with programming. recommend
Linux Programming-A beginner`s guide. excellent coverage on all shell,s. also open all subsections of http://tldp.org/HOWTO/HOWTO-INDEX/ section
4.6Programming subsections 4.6.1 through 4.6.10. and please expand all sections including subsection for detailed information.

Hko 08-05-2004 07:31 AM

That depends...
If it is a KDE or Gnome (or maybe XFCE) application, this should be possible. If it's just a plain X-windows, GTK, SDL, Qt, or whatever "normal" (i.e. non-desktop evironment) toolkit, you would need to program you own file-type-to-application association table.

Sorry, I don't know the exact funtions to call from KDE or gnome.

skoona 08-06-2004 02:03 AM

There are two Glib functions available. g_spawn_command_line_sync() and g_spawn_async(). Here is an example of the later.

Code:

/* **************************************************
 * sh_cmd() - executes a command in the background
 * returns TRUE is command was executed  (not the result of the command though..)
 * NO GLOBALS
*/
static gint sh_cmd (gchar * path, gchar * cmd, gchar * args)
{
  gchar    cmd_line[256];
  gchar  **argv;
  gint      argp;
  gint      rc = 0;

  if (cmd == NULL)
    return FALSE;

  if (cmd[0] == '\0')
    return FALSE;

  if (path != NULL)
    chdir (path);

  snprintf (cmd_line, sizeof (cmd_line), "%s %s", cmd, args);

  rc = g_shell_parse_argv (cmd_line, &argp, &argv, NULL);
  if (!rc)
  {
    g_strfreev (argv);
    return rc;
  }

  rc = g_spawn_async (path, argv, NULL,
                      G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_SEARCH_PATH,
                      NULL, NULL, NULL, NULL);

  g_strfreev (argv);

  return rc;
}

Here is a snippet of the other
Code:

static gint get_new_ptable (P_Fah_monitor fm)
{
 gint  i_retcode = 0, i_exitcode = 0;
 gchar cv_filename[384];
 
#ifdef DLOGIC
  g_message (CONFIG_NAME":> Entered get_new_ptable(%d)...\n",fm->cb_id);
#endif
 
  if ( fm->i_stanford_points )  // TRUE if point table IS out of date
  {
    chdir ( fm->path_string );
   
    i_retcode = g_spawn_command_line_sync (
                    g_strdup_printf ("wget -N %s", STANDFORD_FAHPOINTS_URL),
                                        NULL, NULL, &i_exitcode, NULL);
   
    if( i_retcode )
    {
    ... good if retcode = 0
    }


cppkid 08-06-2004 02:15 AM

Thanks Skona that was really helpfull,
Thank's alot.


All times are GMT -5. The time now is 04:17 AM.