c语言实现pgrep
时间: 2024-06-08 13:03:01 浏览: 220
实现grep命令
pgrep是一个Linux/Unix系统中常用的进程查找工具,它可以根据指定的进程名或进程ID来查找匹配的进程。在C语言中,可以通过调用系统提供的函数来实现pgrep的功能。其中比较常用的函数包括:
1. getpid()函数:获取当前进程的PID(进程ID)。
2. opendir()函数:打开一个目录。
3. readdir()函数:读取一个目录项。
4. closedir()函数:关闭一个目录。
5. sscanf()函数:将一个字符串格式化为指定类型的数据。
6. strcmp()函数:比较两个字符串是否相等。
下面是一个简单的C语言程序,用于实现pgrep的功能:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
int main(int argc, char *argv[]) {
char *name;
DIR *dir;
struct dirent *entry;
char buf[512];
int pid;
if (argc != 2) {
fprintf(stderr, "Usage: %s name\n", argv);
exit(1);
}
name = argv;
dir = opendir("/proc");
if (dir == NULL) {
perror("opendir");
exit(1);
}
while ((entry = readdir(dir)) != NULL) {
if (sscanf(entry->d_name, "%d", &pid) == 1) {
sprintf(buf, "/proc/%d/cmdline", pid);
FILE *fp = fopen(buf, "r");
if (fp) {
fgets(buf, sizeof(buf), fp);
fclose(fp);
if (strcmp(name, buf) == 0) {
printf("%d\n", pid);
}
}
}
}
closedir(dir);
exit(0);
}
```
这个程序接受一个参数,即要查找的进程名,然后遍历系统中所有的进程,查找命令行参数中包含该进程名的进程,并输出它们的PID。
阅读全文