C实现 cat 220/maps | grep '.so' | awk '{print $6}' | sort -u
时间: 2023-10-15 15:02:45 浏览: 91
这是一个基于 Linux 命令行的管道操作,实现的功能是从文件列表中找到所有以 .so 结尾的文件,并输出这些文件的路径并去重。
具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1024
int main() {
FILE *fp;
char cmd[MAX_LINE_LEN];
char buf[MAX_LINE_LEN];
/* 执行 cat 220/maps 命令 */
sprintf(cmd, "cat 220/maps");
fp = popen(cmd, "r");
if (fp == NULL) {
perror("popen");
exit(EXIT_FAILURE);
}
/* 读取文件列表,找到所有以 .so 结尾的文件 */
while (fgets(buf, MAX_LINE_LEN, fp) != NULL) {
if (strstr(buf, ".so") != NULL) {
/* 执行 awk '{print $6}' 命令 */
sprintf(cmd, "echo \"%s\" | awk '{print $6}'", buf);
FILE *fp2 = popen(cmd, "r");
if (fp2 == NULL) {
perror("popen");
exit(EXIT_FAILURE);
}
/* 读取路径并去重,执行 sort -u 命令 */
char *path = fgets(buf, MAX_LINE_LEN, fp2);
if (path != NULL) {
static char last_path[MAX_LINE_LEN] = "";
if (strcmp(path, last_path) != 0) {
printf("%s", path);
strcpy(last_path, path);
}
}
pclose(fp2);
}
}
pclose(fp);
return 0;
}
```
需要注意的是,该程序依赖于 Linux 系统中的 cat、grep、awk 和 sort 命令,因此只能在 Linux 环境下运行。
阅读全文