#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <limits.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h> #define PROC "/proc/" typedef int Myfunc(int pid) ;
static Myfunc myfunc; #define P() printf("%s:%d\n",__FUNCTION__,__LINE__)
static int dopath(Myfunc *func); int main(int argc,char *argv[])
{
return dopath(myfunc);
}
static int
dopath(Myfunc *func)
{
//struct stat statbuf;
struct dirent *dirp;
DIR *dp;
int ret;
char *ptr; //if()
if((dp = opendir(PROC)) == NULL)
{
perror("open");
return -;
} while((dirp = readdir(dp)) != NULL)
{
if(strcmp(dirp->d_name,".") == ||strcmp(dirp->d_name,"..")==)
{
continue;
}
int pid = atoi(dirp->d_name);
//printf("pid =%d\n",pid);
if(pid == )
{
continue;
}
int ret = myfunc(pid);
if(ret != )
{
printf("parse error!\n");
return -;
}
}
if(closedir(dp) < )
{
printf("cant't close directory /proc");
return -;
}
return ;
}
static int
myfunc(int pid)
{
char path[]={};
const char *name="Name:";
const char *state = "State:";
char pname[] = {}; sprintf(path,"/proc/%d/status",pid);
if(access(path,F_OK)!=)
{
printf("%s not exist.\n",path);
return -;
} int fd = open(path,O_RDONLY);
if(fd<)
{
perror("open");
return -;
} char buf[]={};
int length = read(fd,buf,sizeof(buf));
if(length<)
{
perror("read");
close(fd);
return -;
}
char *p0 =strstr(buf,name);
char *p1 =strstr(buf,state);
memcpy(pname,p0+strlen(name)+,p1-p0-strlen(name)-);
printf("pname:%s\n",pname); close(fd); return ;
}

写几行代码来打印pid对应的进程名。

java版本:

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader; /**
* @author jevan (jevan.cnblogs.com)
* @version 1.0 at 2013-11-27
*
*/
public class PrintPID { /**
* @param args
*/
public static void main(String[] args) {
printPid();
} private static void printPid()
{ File proc = new File("/proc");
for(File f:proc.listFiles())
{
if(f.getName().equals(".")||f.getName().equals(".."))
continue; if(f.isDirectory())
{
int pid = toInt(f.getName());
if(pid == 0)
continue; File fname = new File("/proc/"+f.getName()+"/status"); if(!fname.exists())
continue; String line0 =read0Line("/proc/"+f.getName()+"/status"); String[] tmp = line0.split(":",2);
if(tmp==null||tmp.length!=2)
{
continue;
}
p("==>"+tmp[1]); }
}
} public static void p(String msg)
{
System.out.println(msg);
} public static String read0Line(String filePath)
{
FileInputStream fis = null;
try {
fis = new FileInputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if(fis == null)
{
return null;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
try {
String line0 = reader.readLine();
//p(line0);
return line0;
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
reader.close();
fis.close();
} catch (Exception e2) {
}
}
return null;
} public static int toInt(String str)
{
int ret = 0;
try{
ret = Integer.valueOf(str);
}catch(Exception e)
{
ret = 0;
}
return ret;
} }

执行:

 [jevan@media pname]$ time java PrintPID

 real    0m0.150s
user 0m0.098s
sys 0m0.056s
[jevan@media pname]$ time ./dir real 0m0.019s
user 0m0.000s
sys 0m0.005s
[jevan@media pname]$

打印pid,写着玩。的更多相关文章

  1. python写机器人玩僵尸骰子

    python写机器人玩僵尸骰子由Al Sweigart用python发布注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令.如果你觉得有什么地方可以改进,请发邮件到al@inventwithpy ...

  2. c# 写着玩的,两个Task并发,一个写队列一个读队列的异常情况

    class Program { class TestEnqueue { static Queue<string> str = new Queue<string>(); publ ...

  3. Springboot+WebSocket+Kafka(写着玩的)

    闹着玩的来源:前台发送消息,后台接受处理发给kafka,kafka消费者接到消息传给前台显示.联想到websocket. 最终效果如图: 页面解释: 不填写内容的话,表单值默认为Topic.Greet ...

  4. php l练习(写着玩)

    需求:假设今天24号,今天发表的评论显示几小时前发布,23号发布的显示 昨天几点发布的,再往前的就直接显示年月日. date_default_timezone_set('PRC'); // $crea ...

  5. 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩

    百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...

  6. 自己写着玩的一个天气APP

    打开的界面: 向上滑动,进入主界面: 省份界面: 城市界面: 加载天气界面: 显示天气界面: 侧滑,显示地区,然后根据天气来显示一首诗句(晴,多云,雪,雨什么的): 第一次启动App的时候才会加载数据 ...

  7. [uiautomator篇] [4] 运行成功的日志打印---最后写一个脚本来实现

    Testing started at 18:23 ... 05/10 18:23:01: Launching ChangeTextBehaviorTestNo apk changes detected ...

  8. 写着玩的bash脚本

    #!/bin/bash function strealingManu { pwdfolder=`pwd` for var in "$@" do man 1 $var > $p ...

  9. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

随机推荐

  1. 用js写出光棒效应的两种方法与jquery的两中方法

    <script src="js/jQuery1.11.1.js" type="text/javascript"></script> &l ...

  2. Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC

    What's In This Chapter? Features of ASP.NET MVC 6 Routing Creating Controllers Creating Views Valida ...

  3. Ubuntu Hash Sum mismatch 解决方法

    有时候通过校园网对Ubuntu14.04进行更新时,会出现以下问题: W: Failed to fetch http://xxxxxxx Hash Sum mismatch 解决方法:打开搜索 →  ...

  4. QTP11完美破解小笔记

    相比Loadrunner的破解,QTP的应该会更简单,但是效果并没有Loadrunner的长久.QTP的破解只能维持30天,每30天需要再进行如下操作: 1.到C:\ProgramData目录下面去删 ...

  5. web前端升级之路

    web前端菜鸟如何升级到大神(转载) 标签:web前端 随着互联网的发展速度迅猛,web前端工程师越来越火热,想学习 Web前端开发 吗 ? 若想成为web前端工程师需要掌握哪些知识?今天小编总结了成 ...

  6. 【Scala】Scala之Object

    一.前言 前面学习了Scala的Methods,接着学习Scala中的Object 二.Object Object在Scala有两种含义,在Java中,其代表一个类的实例,而在Scala中,其还是一个 ...

  7. Python编程快速上手——让繁琐工作自动化学习笔记

    第一部分 基本语法 1.字符串不能直接和数字相加,要用str()转一下:但是可以和数字相乘,用于表示多个字符串复制:字符串不能和浮点数直接结合,字符串可以和字符串直接相加: 2.输入函数用input( ...

  8. Java设计模式之《组合模式》及应用场景

    摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6489827.html 组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是 ...

  9. Vuex 学习总结

    好在之前接触过 flux,对于理解 vuex 还是很有帮助的.react 学到一半,后来因为太忙,就放弃了,现在也差不多都忘记了.不过感觉 vuex 还是跟 flux 还是有点区别的. 对于很多新手来 ...

  10. H5微场景宽、高度自适应办法

    最近在做一些手机端微场景,发现处理各种手机屏幕分辨率是个很让人头疼的事情,最终找到了一个处理效果比较满意的方案.各位客观请往下看: 如果有过做微场景经历的客官们应该都了解,在代码中给一个元素的宽高设成 ...