方法

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_PIPEG_SUBPROCESS_FLAGS_STDERR_PIPE,则从这些流读取数据。读取的数据将返回在stdout和/或stderr中。

如果子进程是以G_SUBPROCESS_FLAGS_STDOUT_PIPE创建的,则stdout_buf将包含从stdout读取的数据。否则,对于未以G_SUBPROCESS_FLAGS_STDOUT_PIPE创建的子进程,stdout_buf将被设置为NULL。类似的规定适用于stderr_bufG_SUBPROCESS_FLAGS_STDERR_PIPE

如常,任何输出变量都可以作为NULL提供以忽略它。

如果您希望stdout和stderr数据错开,请使用G_SUBPROCESS_FLAGS_STDOUT_PIPEG_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;调用者将拥有数据,并负责释放它。

返回值

类型:gboolean

如果成功则为 TRUE