#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. 每天一个Linux命令(11)--nl命令

    nl命令在Linux系统中用来计算文件中行号.nl可以将输出的文件内容自动的加上行号,其默认的结果与cat -n 有点不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动不起0等等的功能. ...

  2. ERP顾问工作中应该注意哪些工作是不该做的

    1.不要轻易对客户说“不“ 当客户提出一个问题顾问要判断一下,是否属于顾问实施的问题,如果属于顾问实施范畴,而自己又不清楚,这时应把问题纪录下来,和客户解释清楚,回去请教资深顾问给与回答,如果该问题不 ...

  3. 用css实现3D立方体旋转特效

    先来看运行后出来的效果 它是在不停运行的一个立方体 先来看html部分的代码 <div class="rect-wrap"> <!--舞台元素,设置perspec ...

  4. ci 框架发送邮箱

    定义数据 $config = array(    'protocol' =>'smtp',    'smtp_host'=>'ssl://smtp.163.com',    'smtp_u ...

  5. Git基础教程(一)

    本教程为学习笔记,github作为最受欢迎的资源库,不可不学!详细教程参见:廖雪峰的官方网站Git教程系列.准备花两篇幅搞定实战总结,闲言碎语少说,脚踏实地求真! 1,Git入门       Git是 ...

  6. 九度OJ题目1443:Tr A (JAVA)

    题目描述: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. 输入: 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n(2 <= n & ...

  7. docker X509 证书错误的终极解决办法

    最近在做Docker相关的东西,发现只要一pull镜像,就出现如下的ERROR x509: certificate signed by unknown authority. 调查后发现,是公司IT把h ...

  8. Maven使用说明

    maven的作用. Maven 是一个项目管理和构建自动化工具.可以方便我们导入jar包. maven的安装. 要想安装maven,首先你需要安装jdk,并且配置jdk环境变量.右键点击计算机,选择属 ...

  9. Redis Sentinel中的机制与原理详解

    序言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案.实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署. 它的主要功能有以 ...

  10. Mac本地编辑服务器代码

    windows上映射网络驱动器可以直接在本地编辑远程服务器的代码,那么在mac上怎么配置呢? 1.打开finder——前往——连接服务器——输入:smb://********(你的机器名) 2.输入服 ...