在win32,GIOchannel上使用标准输入操作

时间:2014-01-19 18:36:22

标签: c++ winapi stdin glib

我们假设我有一些GLib示例检查stdin流(读取绑定到它的GIOchannel的行

 io_stdin = g_io_channel_unix_new(fileno(stdin)); 

通过g_io_chanell_read_line())

从中获取数据并做点什么。

此示例适用于 cmd ,我需要它在 win32 app 下工作。

显然,我没有控制台可以打印到stdin,但我可以将此数据作为字符串变量获取,因为用户将在我的应用程序的输入字段中输入该数据。

而且我真的不需要控制台,基本上,对我来说重要的是 - 这个标准输入流是否仍然存在并且在win32应用程序的引擎下工作,因此可以通过g_io_chanell_read_line(io_stdin...)阅读?

我是否可以通过g_io_channel_write(io_stdin...)将此字符串数据传递给它,并使所有这些内容工作,或者如果没有,我是否需要将自己的流绑定到GIOChannel,以及如何?< / p>

编辑:一些澄清: 几个单独的过程;在一个进程中,用户在输入字段中键入一些数据(而不是win32字段,实际上是HTML输入字段),此进程获取此数据并可以对其执行任何操作 - 将其发送到另一个进程,变量或任何内容。

同时线程中的另一个进程,与主win32线程分开,必须查找此值,并且,尽快得到它 - 做的事情。

解决这个问题&#34;注意数据和事情&#34;必须是多平台并基于Glib。 我想把这些数据发送到GIOchannel,因为这是在cmd示例中的方式。

这是我试图从中获得等价物的部分:

     while (!exit_thread) { 
    GIOStatus s = g_io_channel_read_line (io_stdin, &line, NULL, NULL, NULL);
    if (s == G_IO_STATUS_NORMAL) {
      gsize sdp_len;

      sdp = (gchar *) g_base64_decode (line, &sdp_len);
      // Parse remote candidate list and set it on the agent
      if (sdp && nice_agent_parse_remote_sdp (agent, sdp) > 0) {
        g_free (sdp);
        g_free (line);
        break;
      } else {
        fprintf(stderr, "ERROR: failed to parse remote data\n");
        printf("Enter remote data (single line, no wrapping):\n");
        printf("> ");
        fflush (stdout);
      }
      g_free (sdp);
      g_free (line);
    } else if (s == G_IO_STATUS_AGAIN) {
        #if defined(__unix__) || defined(__unix)     
    usleep (100000);
    #else
    Sleep (100);
    #endif
    }
  }

现在我在想为什么我不能做while(//something//) { if (//string is not empty//) {do stuff and brake or give error} else {run while another iteration}

0 个答案:

没有答案