用c语言写一个模糊Pid的代码
时间: 2023-02-20 15:57:44 浏览: 336
以下是一个简单的C语言代码,实现了对进程ID (PID) 的模糊匹配:
```
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#include <regex.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("请输入模糊匹配的 PID\n");
return 1;
}
regex_t reg;
int res = regcomp(®, argv[1], REG_EXTENDED | REG_NOSUB);
if (res != 0) {
char err[1024];
regerror(res, ®, err, sizeof(err));
printf("正则表达式编译失败:%s\n", err);
return 1;
}
DIR *dir = opendir("/proc");
if (dir == NULL) {
perror("打开 /proc 目录失败");
return 1;
}
struct dirent *ent;
while ((ent = readdir(dir)) != NULL) {
if (ent->d_type != DT_DIR) {
continue;
}
int pid = atoi(ent->d_name);
if (pid <= 0) {
continue;
}
char cmdline_path[1024];
snprintf(cmdline_path, sizeof(cmdline_path), "/proc/%d/cmdline", pid);
FILE *f = fopen(cmdline_path, "r");
if (f == NULL) {
continue;
}
char cmdline[1024];
if (fgets(cmdline, sizeof(cmdline), f) == NULL) {
fclose(f);
continue;
}
fclose(f);
if (regexec(®, cmdline, 0, NULL, 0) == 0) {
printf("匹配的 PID:%d,命令:%s", pid, cmdline);
}
}
closedir(dir);
regfree(®);
return 0;
}
```
这段代码使用了 POSIX 正则表达式库来实现模糊匹配,并在 /proc 目录下搜索所有进程的 cmdline 文件,找出符合条件的 PID。使用前请确保系统中安装了 regex.h 库。
阅读全文