对于popen返回的FILE,fgets返回错误。

您所在的位置:网站首页 fgets返回null 对于popen返回的FILE,fgets返回错误。

对于popen返回的FILE,fgets返回错误。

2023-05-12 16:27| 来源: 网络整理| 查看: 265

问题描述

我正在尝试从我的C代码执行命令行,但是当我到达FGETS()函数时,我遇到了一个空错误.

void executeCommand(char* cmd, char* output) { FILE *fcommand; char command_result[1000]; fcommand = popen(cmd, "r"); if (fcommand == NULL) { printf("Fail: %s\n", cmd); } else { if (fgets(command_result, (sizeof(command_result)-1), fcommand) == NULL) printf("Error !"); strcpy(output, command_result); } pclose(fcommand); }

我的命令是:

java -jar

为什么我会从fgets产生零结果,尽管当我尝试在终端中执行相同的命令时,它会按预期工作.

推荐答案

fgets()读取最多比流的大小字符少. 并将它们存储到由s指向的缓冲区中.阅读停止之后 eof或newline.如果读取新线,则将其存储在缓冲区中. a'\ 0'在缓冲区中的最后一个字符之后存储.

简而言之,popen()正在执行fork(),并且您正在尝试从管道中读取程序,然后在该程序引起的cmd>> cmd中产生了输出,因此,管道上没有数据,第一次读取管道上将返回EOF,因此fgets()返回而无需获取数据.您要么需要睡觉,进行民意调查或进行阻止阅读.

本文地址:https://www.itbaoku.cn/post/1758737.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3