我们假设我有一些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}