popen pclose
时间: 2023-11-19 16:52:35 浏览: 105
popen和pclose是C语言中用于执行shell命令的函数。popen函数可以打开一个进程,并返回一个文件指针,可以通过该文件指针读取该进程的输出信息。而pclose函数则用于关闭由popen打开的进程,并等待该进程结束。但是,pclose是一个阻塞函数,如果想要不阻塞,需要自己实现my_popen函数。在子进程中,需要关闭之前调用popen时打开且当前仍旧打开的所有I/O流。如果应用程序调用waitpid,并且获得popen所创建的子进程的终止状态,则在应用程序调用pclose时,其中将调用waitpid,它发现子进程已不再存在,此时返回-1,errno被设置为ECHILD。
相关问题
pclose
pclose() 函数用于关闭由 popen() 函数打开的管道,并返回执行命令的返回值。它的原型如下:
```c
#include <stdio.h>
int pclose(FILE *stream);
```
其中,stream 是由 popen() 函数返回的文件指针,表示要关闭的管道。
pclose() 函数会等待被调用进程的结束,并获取进程的退出状态。如果进程正常结束,函数返回进程的退出状态;如果进程异常结束,函数返回一个非零值。如果出现错误,函数返回 -1。
popen
popen是一个C标准库函数,用于创建一个管道并打开另一个进程的标准输入或输出流。通常情况下,popen函数用于执行一个外部命令,并且允许在程序中与该命令进行交互。
popen函数的原型如下:
```c
#include <stdio.h>
FILE *popen(const char *command, const char *type);
```
其中,command参数是要执行的命令,type参数是“r”或“w”,表示读或写。popen函数返回一个文件指针,可以通过该文件指针来读取或写入该进程的标准输入或输出流。
例如,以下代码将执行一个外部命令并读取其输出:
```c
#include <stdio.h>
int main() {
FILE *fp;
char buffer[1024];
fp = popen("ls -l", "r");
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
printf("%s", buffer);
}
pclose(fp);
return 0;
}
```
这个程序将执行一个ls -l命令并将其输出打印到控制台上。注意到在程序结束时需要调用pclose函数来关闭进程和管道。
阅读全文