Unix 在C中模拟“find”命令

Unix 在C中模拟“find”命令,unix,find,Unix,Find,在C编程语言中,最好的方法是什么 find fileName 这是一个复杂的话题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。这是一个复杂的主题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。查找POSIX函数。它被设计为“新文件树漫游”功能 有一个相关但不是立即可用的函数,您可以使用它

在C编程语言中,最好的方法是什么

find fileName

这是一个复杂的话题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。

这是一个复杂的主题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。

查找POSIX函数。它被设计为“新文件树漫游”功能


有一个相关但不是立即可用的函数,您可以使用它。例如,selection函数可能用于调用子目录上的递归扫描,但nftw可能更合适。

查找POSIX函数。它被设计为“新文件树漫游”功能

有一个相关但不是立即可用的函数,您可以使用它。例如,选择函数可能用于调用子目录上的递归扫描,但nftw可能更合适。

您可以从分叉子进程调用find,并从管道中返回find的输出:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define BUFSIZE 1000

int main(void) {
  int pfd[2], n;
  char str[BUFSIZE + 1];

  if (pipe(pfd) < 0) {
    printf("Oups, pipe failed.  Exiting\n");
    exit(-1);
  }

  n = fork();

  if (n < 0) {
    printf("Oups, fork failed.  Exiting\n");
    exit(-2);
  } else if (n == 0) {
    close(pfd[0]);

    dup2(pfd[1], 1);
    close(pfd[1]);

    execlp("find", "find", "filename", (char *) 0);
    printf("Oups, execlp failed.  Exiting\n"); /* This will be read by the  parent. */
    exit(-1); /* To avoid problem if execlp fails, especially if in a loop. */
  } else {
    close(pfd[1]);

    while ((n = read(pfd[0], str, BUFSIZE)) > 0) {
      str[n] = '\0';
      printf("%s", str);
    }

    close(pfd[0]);
    wait(&n); /* To avoid the zombie process. */

    if (n != 0) {
       printf("Oups, find or execlp failed.\n");
    }
  }
}
您可以从分叉子进程调用find,并从管道返回find的输出:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define BUFSIZE 1000

int main(void) {
  int pfd[2], n;
  char str[BUFSIZE + 1];

  if (pipe(pfd) < 0) {
    printf("Oups, pipe failed.  Exiting\n");
    exit(-1);
  }

  n = fork();

  if (n < 0) {
    printf("Oups, fork failed.  Exiting\n");
    exit(-2);
  } else if (n == 0) {
    close(pfd[0]);

    dup2(pfd[1], 1);
    close(pfd[1]);

    execlp("find", "find", "filename", (char *) 0);
    printf("Oups, execlp failed.  Exiting\n"); /* This will be read by the  parent. */
    exit(-1); /* To avoid problem if execlp fails, especially if in a loop. */
  } else {
    close(pfd[1]);

    while ((n = read(pfd[0], str, BUFSIZE)) > 0) {
      str[n] = '\0';
      printf("%s", str);
    }

    close(pfd[0]);
    wait(&n); /* To avoid the zombie process. */

    if (n != 0) {
       printf("Oups, find or execlp failed.\n");
    }
  }
}

为什么不看看查找源代码?签出。为什么不看看查找源代码?签出。看也看我喜欢!直到现在才知道nftw。似乎真的是POSIX。我甚至把它放在我的OS X上。我喜欢这样!直到现在才知道nftw。似乎真的是POSIX。我甚至把它放在了我的OSX上。