#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. javah的使用

    2.我们要开始写javah的命令,以便生成对应的C语言头文件 D:\我的文档\workspace\PrepareForExam\src>javah -classpath D:\我的文档\work ...

  2. STM32按键控制程序

    由于最近时间比较匆忙 已经有很久的时间没有写博客了 这次和大家分享的是STM32的一个按键的小程序 他的优点呢也是和上面一个LED一样就是便于移植 更改管脚方便 虽然都是些小程序 但是我觉得他们就像基 ...

  3. 【PHP系列】PHP推荐标准之PSR-3,日志记录器接口

    上节聊完了PHP官方的相关代码规范,下面给大家带来了PHP系列的PHP推荐标准的另外两个,PSR-3,PSR-4. 首先,我们先来了解下PSR-3是怎么回事. PHP-FIG发布的第三个推荐规范与前两 ...

  4. JDK 安装过程

    1.首先是下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.下载完 ...

  5. 纯CSS3之五子棋(黑白棋)画法

    无聊想用JS写个五子棋玩玩,这边先用CSS3画出了五子棋,感觉挺惊艳的.发上来看看 PS:第一次发博文T-T  此为个人原创. 不多说上图: 代码如下: <!DOCTYPE html> & ...

  6. 用DapperExtensions和反射来实现一个通用搜索

    前言 搜索功能是一个很常用的功能,当然这个搜索不是指全文检索,是指网站的后台管理系统或ERP系统列表的搜索功能.常见做法一般就是在搜索栏上加上几个常用字段来搜索.代码可能一般这样实现 StringBu ...

  7. Debian部署RMI异常:java.rmi.ConnectException: Connection refused to host: 127.0.1.1;

    现象:在windows上部署RMI很顺利,但移到debian上部署后,客户端报异常: java.rmi.ConnectException: Connection refused to host: 12 ...

  8. java基础:数组查询,同一数组一个元素最多出现两次

  9. (六)javascriptJS中定义对象的几种方式(转)

    JavaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象 ...

  10. CoreGraphics--画线/圆/矩形

    - (void)drawRect:(CGRect)rect { // Drawing code NSLog(@"drawRect自动调用"); //画图步骤 //获取上下文(/画笔 ...