开发者

Emulating ' find ' command in C

What would be the best way to do this in the C p开发者_运维知识库rogramming language?

find fileName


Look up the POSIX function nftw(). It is designed as a 'new file tree walk' function.

There's a related but not immediately as useful function scandir() which you might use. The selection function might be used to invoke a recursive scan on sub-directories, for example, but nftw() is probably more appropriate.


You could call find from a forked child process and get back find's output from a pipe:

#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");
    }
  }
}


That's a complex topic. Have a look at the GNU libc documentation. Then try to scan the current directory using scandir. If that works, you can implement a recursive version, assuming you are talking about the UNIX find command and want to do recursive search for file names.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜