C语言popen函数编译(连接)的时候总说有一个error(错误),找不到原因求大神帮忙TAT

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言popen函数编译(连接)的时候总说有一个error(错误),找不到原因求大神帮忙TAT相关的知识,希望对你有一定的参考价值。

C语言popen函数编译(连接)的时候总说有一个error(错误),找不到原因求大神帮忙TAT代码:
#include <stdio.h>
#include <stdlib.h>

int main (void)

char buf[1024];
FILE *fp = popen("tasklist", "r");

fgets(buf, sizeof(buf), fp);

printf("%s", buf);

return 0;

如果你是用的基于gcc的编译器 这个代码不会出问题 比如dev-C++ 或者C-free一类的
如果用VC或者VS 那这个就会出错了
因为VC不支持popen而是_popen 需要改成
FILE *fp = _popen("tasklist", "r");追问

用dev-C++也不行呀

用c-free跑起来好像没什么问题谢谢

参考技术A 奇怪了,我用c-free编译,可以通过啊。

C 语言popen函数,实现shell和读取内容

1. popen()函数

头文件:#include <stdio.h>

函数原型:FILE * popen(const char * command, const char * type);

关闭文件流:int pclose(FILE * stream);

  函数popen 先执行fork,然后调用exec以执行cmd,并且返回一个标准I/O文件指针。

  cmd是一个包含shell命令的字符串指针(以NULL结束字符结尾);
  如果type是"r",则文件指针连接到cmd的标准输出;
  如果type是"w",则文件指针连接到cmd的标准输入。

2. 描述

  popen() 函数用创建管道的方式启动一个进程, 并调用 shell. 因为管道是被定义成单向的, 所以type参数只能定义成只读或者只写, 不能是两者同时, 结果流也相应的是只读或者只写.

  command 参数是一个字符串指针, 指向的是 一个以 null 结束符结尾的字符串, 这个字符串包含一个 shell 命令. 这个命令被送到 /bin/sh 以 -c 参数执行, 即由 shell 来执行. type 参数也是一个 指向以 null 结束符结尾的字符串的指针, 这个字符串必须是 ‘r‘ 或者 ‘w’ 来指明是读还是写.

   popen() 函数的返回值是一个普通的标准I/O流, 它只能用 pclose() 函数来关闭, 而不是 fclose() 函数.

  注意, popen 函数的输出流默认是被全缓冲的;pclose 函数等待相关的进程结束并返回一个 command 命令的退出状态, 就像 wait4 函数 一样

3. 示例

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     FILE * fp;
 6     if ((fp = popen("ls -l", "r)) == NULL)
 7     {
 8         perror("open failed!");
 9         return -1;
10     }
11     char but[256];
12     while (fgets(but, 255, fp) != NULL)
13         printf("%s", buf);
14     if (pclose(fp) == -1)
15     {
16         perror("close failed!");
17         return -2;
18     }
19     return 0;
20 }

 



以上是关于C语言popen函数编译(连接)的时候总说有一个error(错误),找不到原因求大神帮忙TAT的主要内容,如果未能解决你的问题,请参考以下文章

移动硬盘无法弹出总说有程序占用

C语言popen()函数 pclose()函数(打开关闭流入或流出进程的管道流)

C 语言popen函数,实现shell和读取内容

移动硬盘无法弹出 总说有程序占用显示explorer

C语言中 总说算法复杂度不超过0(n~2)是什么意思啊

keil编程中为啥总说我变量未定义? 不只是keil,C语言也经常有这种情况。根本不知道哪里错了