windows 用 tasklist 命令,linux 用 ps 命令。
c 使用 popen 函数来解析返回的字符串,一旦发现 xx 进程运行则用 system 函数启动另一个程序。
如果需要持续检测,用 while 加 sleep 轮询。
起码你的代码有一个漏洞:第一次进入while时,!feof(pipe)是在判断谁?说明你对feof()这个函数并没有掌握,它必须在逻辑上“紧跟”在读文件动作之后才能正确生效,这第一次是“紧跟”在哪个读动作之后?到了文件结尾处就更可笑了:经while(!feof(pipe))判断文件还没有结束,比如说文件中还剩一个最后的'\n',可是体中的if(fread(&c,1,1,pipe)==1)中的fread函数还能读到什么?细节我就不说了,太长。建议把while(!feof(pipe)){
if(fread(&c,1,1,pipe)==1){
result[i++]=c
if(c==0)
break
}
}
这一段改成
while(fread(&c,1,1,pipe),!feof(pipe)){
result[i++]=c
//if(c==0)//这两句考虑一下吧,文件中有0吗?不可能有0,所以逻辑就有问题,建议删除
//break
}
一试。
这里有一点好多网友没弄清,那就是feof()函数本身不读文件,只检查最近一次读动作越界(跨过文件结束符读)了没有。可续问。
这个函数的功能应该是读取当前目录下的内容的popen可以启动一个新的进程,ls -l则是要启动进程得程序名和参数,ls -l当然即使列出目录的意思咯
"r"是代表调用进程可以通过返回的文件指针读取到新启动的进程的输出。也可以是"w",这样调用进程就可以通过向文件写内容而新启动的进程从标准输入读取。事实上这就是进程间的管道通信。
popen返回一个文件指针,返回空指针也就是0即出错咯。
下面的while循环,就是把返回的文件的内容读取到传入的sck文件描述符所指向的文件中,fileno是把文件指针转换为文件描述符
pclose函数就是关闭这个管道,它的返回值是新启动的这个程序的退出码,
一般来说程序都返回0代表正确嘛,非零当然就表示程序可能有问题,如果是pclose函数错误会返回-1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)