_popen, _wpopen
创建一个管道并执行命令。
重要
此 API 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 CRT 函数不支持与 /ZW。
FILE *_popen( const char *command, const char *mode ); FILE *_wpopen( const wchar_t *command, const wchar_t *mode );
参数
命令
命令执行。mode
返回的流的架构。
返回值
返回流与已创建的管道的一端。 管道的另一端与给定的命令的标准输入或标准输出。 函数返回在错误的 空。 如果错误是无效参数,例如,如果 命令 或 模式 是 null 指针或 架构 不是有效的模式,errno 设置为 EINVAL。 为活动模式参见"备注"节。
有关这些属性和其他错误代码的信息,请参见 _doserrno、errno、_sys_errlist 和_sys_nerr。
备注
_popen 函数创建一个管道和异步执行命令处理器的一个给定的副本与指定字符串 的命令。 字符字符串 模式 指定请求的访问类型,如下所示。
"r"
使用返回的流,调用进程可以读取给定的命令的标准输出。"w"
使用返回的流,调用进程可以写入给定的命令的标准输入。"b"
打开在二进制模式。"t"
打开在文本模式。备注
如果使用在窗口过程,_popen 函数返回会导致程序停止无限期地响应的无效文件指针。_popen 在控件个应用程序正常工作。若要创建重输入和输出定向的 windows 应用程序,请参见。Windows SDK的 创建子进程会重定向的输入和输出。
_wpopen 是 _popen的宽字符版本;为 _wpopen 的 路径 参数是宽字符字符串。 _wpopen 和 _popen 否则具有相同的行为。
一般文本例程映射
Tchar.h 实例 |
未定义的_UNICODE 和_MBCS |
定义的_MBCS |
定义的_UNICODE |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
要求
实例 |
必需的标头 |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> 或 <wchar.h> |
有关更多兼容性信息,请参见中介绍的 兼容性。
库
C 运行库的所有版本。
示例
// crt_popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char psBuffer[128];
FILE *pPipe;
/* Run DIR so that it writes its output to a pipe. Open this
* pipe with read text attribute so that we can read it
* like a text file.
*/
if( (pPipe = _popen( "dir *.c /on /p", "rt" )) == NULL )
exit( 1 );
/* Read pipe until end of file, or an error occurs. */
while(fgets(psBuffer, 128, pPipe))
{
printf(psBuffer);
}
/* Close pipe and print return value of pPipe. */
if (feof( pPipe))
{
printf( "\nProcess returned %d\n", _pclose( pPipe ) );
}
else
{
printf( "Error: Failed to read the pipe to the end.\n");
}
}
示例输出
此输出假定,只有在当前目录的文件与 c++ 文件扩展名。
Volume in drive C is CDRIVE
Volume Serial Number is 0E17-1702
Directory of D:\proj\console\test1
07/17/98 07:26p 780 popen.c
1 File(s) 780 bytes
86,597,632 bytes free
Process returned 0
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。