【发布时间】:2021-05-12 12:12:58
【问题描述】:
如何在 C 中使用popen 打印多行?
所以我不知道如何打印其余的行
这是一个学校项目,我不知道该怎么做。输入文件只包含一个单词。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
int main() {
FILE *f, *fp;
int MAX=256;
char buf[MAX];
f=fopen("input", "r");
if(!f){
fprintf (stderr,"no input \n");
exit(1);
}
fgets(buf,MAX,f);
char cmd[MAX];
sprintf(cmd, "find ~ -name %s 2>/dev/null", buf);
if ((fp=popen(cmd, "r"))==NULL){
perror("perror hiba");
exit(1);
}
if (pclose(fp)==-1) perror("pclose error");
close(f);
return 0;
}
输出只有一行
【问题讨论】:
-
欢迎来到 Stack Overflow!您对待来自
popen的文件指针(fp)与对待来自fopen的文件指针f完全相同;你可以用fgets()读一行,然后用printf打印出来 -
您的意思可能是
fclose(f);而不是close(f)。根据输入和前提条件,我要么没有得到任何输出,要么收到来自find的错误消息。这是我所期望的,因为 1. 代码不处理可以从fp读取的数据和 2.fgets读取的数据可能包含换行符。请edit您的问题并显示您使用的输入、现有文件和目录等先决条件以及实际和预期的输出。确保您运行的代码与问题中显示的代码完全相同。使用复制和粘贴。 -
比 fclose() pclose() 更好...... pclose() 执行 waitpid(),而 fclose() 没有。
-
欢迎来到 Stack Overflow!请不要将解决方案公告编辑到问题中。接受(即单击旁边的“勾选”)现有答案之一,如果有的话。如果现有答案尚未涵盖您的解决方案,您还可以创建自己的答案,甚至接受它。