方法
Gio子进程communicate
自: 2.40
声明 [src]
gboolean
g_subprocess_communicate (
GSubprocess* subprocess,
GBytes* stdin_buf,
GCancellable* cancellable,
GBytes** stdout_buf,
GBytes** stderr_buf,
GError** error
)
描述 [src]
与子进程通信直到它终止,且所有输入和输出都已完成。
如果提供了stdin_buf
,则子进程必须是以G_SUBPROCESS_FLAGS_STDIN_PIPE
方式创建。给定的数据被推送到子进程的stdin,并关闭管道(即:EOF)。
同时(为了避免处理大量数据时阻塞),如果使用了G_SUBPROCESS_FLAGS_STDOUT_PIPE
或G_SUBPROCESS_FLAGS_STDERR_PIPE
,则从这些流读取数据。读取的数据将返回在stdout
和/或stderr
中。
如果子进程是以G_SUBPROCESS_FLAGS_STDOUT_PIPE
创建的,则stdout_buf
将包含从stdout读取的数据。否则,对于未以G_SUBPROCESS_FLAGS_STDOUT_PIPE
创建的子进程,stdout_buf
将被设置为NULL
。类似的规定适用于stderr_buf
和G_SUBPROCESS_FLAGS_STDERR_PIPE
。
如常,任何输出变量都可以作为NULL
提供以忽略它。
如果您希望stdout和stderr数据错开,请使用G_SUBPROCESS_FLAGS_STDOUT_PIPE
和G_SUBPROCESS_FLAGS_STDERR_MERGE
创建子进程。合并的结果将返回在stdout_buf
中,并将stderr_buf
设置为NULL
。
在任何错误(包括取消)的情况下,将返回FALSE
并设置error
。可能已经写入一些或所有的stdin数据。已读取的任何stdout或stderr数据将被丢弃。除了error
之外的所有输出变量都没有设置为特定值,不应进行检查。
如果在返回值为 TRUE
的情况下,子进程已退出,可以使用退出状态检查 API(例如:g_subprocess_get_if_exited(),g_subprocess_get_exit_status())。
在启动此函数后,不应尝试使用任何子进程管道,因为它们可能会处于奇怪的状态,即使操作已取消。在操作进行时(无论是从另一个线程还是使用异步版本)尤其不应尝试与管道交互。
自:2.40
参数
stdin_buf
-
类型:
GBytes
发送到子进程 stdin 的数据,或
NULL
。此参数可以为 NULL
。数据由方法调用者拥有。 cancellable
-
类型:
GCancellable
“GCancellable” 类型。
此参数可以为 NULL
。数据由方法调用者拥有。 stdout_buf
-
类型:
GBytes
从子进程 stdout 读取的数据。
此参数将由函数设置。 方法可以将此参数设置为 NULL
。此参数可以为 NULL
。方法调用者拥有返回的数据,并负责释放它。 stderr_buf
-
类型:
GBytes
从子进程 stderr 读取的数据。
此参数将由函数设置。 方法可以将此参数设置为 NULL
。此参数可以为 NULL
。方法调用者拥有返回的数据,并负责释放它。 error
-
类型:
GError **
用于恢复错误的位置。
此参数可以为 NULL
。如果返回位置不为 NULL
,则必须将其初始化为NULL
GError*
。如果没有错误,方法将保留初始化为 NULL
的参数。发生错误时,参数将设置为新分配的 GError
;调用者将拥有数据,并负责释放它。