我有一个程序通过 popen() 系统调用使用“/usr/bin/lpstat”计算“打印机队列总计”值。
{
int n=0;
FILE *fp=NULL;
printf("Before popen()");
fp = popen("/usr/bin/lpstat -o | grep '^[^ ]*-[0-9]*[ \t]' | wc -l", "r");
printf("After popen()");
if (fp == NULL)
{
printf("Failed to start lpstat - %s", strerror(errno));
return -1;
}
printf("Before fscanf");
fscanf(fp, "%d", &n);
printf("After fscanf");
printf("Before pclose()");
pclose(fp);
printf("After pclose()");
printf("Value=%d",n);
printf("=== END ===");
return 0;
}
注意:在命令行中,“/usr/bin/lpstat”命令暂停了一段时间,因为网络中有许多打印机可用。
这里的问题是,执行挂在 popen() 系统调用上,而我希望它挂在 fscanf() 上,它从文件流 fp 读取输出。
如果有人能告诉我 popen() 系统调用挂起的原因,它将帮助我修改程序以满足我的要求。
感谢您花时间阅读这篇文章和您的努力。