2014-06-17 60 views
0

function g_spawn_command_line_sync()具有參數"gchar **standard_output"油嘴-2.0:g_spawn_command_line_sync() - 未知的stdout長度

https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-command-line-sync

我需要讀取來自standard_output二進制數據,但我不知道standard_output的長度。

Function g_spawn_command_line_sync(): 

http://fossies.org/dox/glib-2.38.2/gspawn-win32_8c_source.html#l01452

執行:

GString *outstr = NULL; 
*standard_output = g_string_free (outstr, FALSE); 

Struct GString include "gsize len",但g_spawn_command_line_sync()只有"gchar **"訪問。

我有下一個解決方案。我寫size of stdoutstderr,它不使用。

示例代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <glib.h> 

int main() 
{ 
    gint exit_status = 0; 
    gchar *p_stdout = NULL; 
    gchar *p_stderr = NULL; 
    GError *p_error = NULL; 
    gboolean result; 

    result = g_spawn_command_line_sync("./make_image.py", &p_stdout, &p_stderr, &exit_status, &p_error); 

    if (!result) { 
     if (p_error != NULL) { 
      printf(p_error->message); 
     } 
     else { 
      printf("ERROR: Command not run\n"); 
     } 
    } 
    else if (exit_status != 0) { 
     printf(p_stderr); 
    } 
    else { 
     int size = atoi(p_stderr); 
     gchar *p_c = p_stdout; 

     for (int i = 0; i < size; ++i) { 
      fputc(*p_c++, stdout); 
     } 

     //printf(p_stdout); 
    } 

    if (p_stdout) { 
     g_free(p_stdout); 
    } 

    if (p_stderr) { 
     g_free(p_stderr); 
    } 

    if (p_error) { 
     g_error_free(p_error); 
    } 

    return 0; 
} 

回答