c语言实现在Linux给你一个文件夹的路径,根据这个路径在所有文件中查找 字符串"11 22 33 44 55",提示文件名,找到的行号
时间: 2024-03-02 12:54:37 浏览: 79
Linux查找文件夹下包含某字符的所有文件
5星 · 资源好评率100%
好的,我来给您讲解一下。
首先,我们需要使用Linux系统的一些命令行工具来实现这个功能。具体来说,我们需要使用`find`命令来查找指定路径下的所有文件,然后使用`grep`命令在文件中查找指定字符串,并输出文件名和行号。
下面是一个C语言程序的示例代码,可以实现您所描述的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUF_SIZE 1024
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
exit(EXIT_FAILURE);
}
char command[BUF_SIZE];
snprintf(command, BUF_SIZE, "find %s -type f -exec grep -n '11 22 33 44 55' {} \\; 2>/dev/null", argv[1]);
FILE *fp = popen(command, "r");
if (fp == NULL) {
perror("popen");
exit(EXIT_FAILURE);
}
char buf[BUF_SIZE];
while (fgets(buf, BUF_SIZE, fp) != NULL) {
printf("%s", buf);
}
pclose(fp);
return 0;
}
```
这个程序的主要思路是将整个命令字符串构造出来,然后使用`popen`函数执行这个命令,并从命令的输出中读取结果。具体来说,我们使用`find`命令查找指定路径下的所有文件,并使用`-exec`选项指定在每个文件上执行`grep`命令。`grep`命令使用`-n`选项输出匹配字符串的行号,并将结果输出到标准输出。最后,我们使用`popen`函数打开命令的输出管道,并从管道中读取结果。
需要注意的是,这个程序会将所有匹配的文件名和行号都输出到标准输出中,您可以根据需要对输出进行解析和处理。同时,为了避免一些不必要的输出,我们使用了`2>/dev/null`选项将错误输出重定向到了`/dev/null`设备文件中。
阅读全文