博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux popen获取ip地址,使用popen函数读取命令输出失败
阅读量:6622 次
发布时间:2019-06-25

本文共 882 字,大约阅读时间需要 2 分钟。

在Linux中,我使用“pidof process_name”命令打开管道,然后使用fgets函数读取输出,从而找到进程的pid。但它偶尔会发现一次失败。以下是我的代码,用于查找我的流程的pid。使用popen函数读取命令输出失败

int FindPidByProcessName(char *pName)

{

int pid = -1;

char line[30] = { 0 };

char buf[64] = { 0 };

sprintf(buf, "pidof %s", pName);

//pipe stream to process

FILE *cmd = popen(buf, "r");

if (NULL != cmd)

{

//get line from pipe stream

fgets(line, 30, cmd);

//close pipe

pclose(cmd); cmd = NULL;

//convert string to unsigned LONG integer

pid = strtoul(line, NULL, 10);

}

return pid;

}

即使进程在“ps”命令输出中可用,输出中也有时会出现pid = 0。 所以,我试图找到这个问题背后的根本原因,我发现像输入/输出缓冲机制可能在我的方案中创建问题。

所以我尝试在打开popen()之前使用sync()函数,奇怪的是我的函数开始以100%的精度工作。

现在sync()函数花费太多时间(大约2分钟)来完成它的执行,这是不可取的。所以我尝试使用fflush(),fsync()和fdatasync(),但这些都不能正常工作。

所以请任何人告诉我这个问题背后的确切根源以及如何正确解决这个问题?

+0

我不明白你的'while'循环 - 你只是调用'popen'一次,你为什么而循环读取输出? –

+0

抱歉误会,这只是我用来编写函数的编码格式。它在这里没有意义,因为它是(0)。它不会被循环。 –

+0

当'pid'为'0'时,'line'的内容是什么? –

转载地址:http://vbvpo.baihongyu.com/

你可能感兴趣的文章
运维学习之用户和组的创立删除和用户权力的使用
查看>>
if语句总结及编写脚本
查看>>
肤浅感受一下为什么曾经的宁波公司不做外包项目的原因
查看>>
MV双网卡网络不通问题
查看>>
网站证书ssl
查看>>
centos(6和7)安装zabbix3.0客户端
查看>>
solidity 0.5.7快速教程
查看>>
使用B2G模拟器
查看>>
并行化-你的高并发大杀器
查看>>
拓思TSPlus 和 思杰Citrix 比较
查看>>
关于XML字符串和XML Document之间的转换《转》
查看>>
diskgenius 还没fdisk好用
查看>>
变频电源的输出滤波器的特点
查看>>
VirtualBox 命令行下添加U盘到虚拟机
查看>>
FinePrint双面打印设置
查看>>
苹果如何将图片转换为文字手机
查看>>
python学习笔记14:多线程
查看>>
有关Spring3.x 整合myBatis3.1的轻量级框架简要说明
查看>>
一个队asp.net session进行了再次封装的C#类的代码
查看>>
基础面试题分享
查看>>