方法
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,则必须将其初始化为NULLGError*。如果没有错误,方法将保留初始化为 NULL的参数。发生错误时,参数将设置为新分配的 GError;调用者将拥有数据,并负责释放它。