⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whereis.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
字号:
/*
 * this example searches the current drive for all instances of a file or
 * list of files.  Wild cards may be used
 *
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <dir.h>

/* Give us a large stack since we will recurse */
int _stklen = 100000;

/*
 * cache argc and argv for use in the matching functions
 */
static char **arglist;
static int argcount;

/*
 * Match a wildcard filename spec against the current input file name
 */
static int matchone(char *name, int num)
{
    char *p = arglist[num];
    while (*p)
    {
        switch (*p)
        {
            case '*':
                while (*name &&  *name != '.')
                    name++;
                while (*p &&  *p != '.')
                    p++;
                break;
            case '?':
                if (*name &&  *name != '.')
                    name++;
                p++;
                break;
            default:
                if (toupper(*p++) != toupper(*name++))
                    return 0;
                break;
        }
    }
    return ! *name;
}

/* 
 * Match the current input file name against all file specs in the argument
 * list
 */
static int matchall(char *name)
{
    int i;
    for (i = 1; i < argcount; i++)
        if (matchone(name, i))
            return 1;
    return 0;
}

/*
 * Scan through a directory looking for normal files and directories.
 * Does NOT find hidden and system files
 */
static void scandir(char *path)
{
    int i;
    char pathbuf[256], dirbuf[256];
    ;
    struct ffblk data;

    /* Make the findfirst file name by concatenating *.* on our path */

    sprintf(dirbuf, "%s\\*.*", path);

    /* find the first file */
    if (findfirst(dirbuf, &data, _A_NORMAL | _A_SUBDIR))
        return ;
    else
    {
        do
        {
            /* For each file that doesn't have a dot in front of it */
            if (data.ff_name[0] != '.')
            {

                /* Make the fully qualified path name */
                sprintf(pathbuf, "%s\\%s", path, data.ff_name);

                /* Check to see if it matches, and if so print the path */
                if (matchall(data.ff_name))
                    printf("%s\n", pathbuf);

                /* now if it is a subdirectory call ourselves recursively */
                if (data.ff_attrib &_A_SUBDIR)
                    scandir(pathbuf);
            } 
            /* until there are no more files */
        }
        while (!findnext(&data));

    }
}

/*
 * Main line, just sets up the first path and initializes the program
 */
int main(int argc, char **argv)
{
    /* Get what drive we are on */
    int disk = getdisk();
    char buf[10];

    /* store our arguments for later */
    arglist = argv;
    argcount = argc;

    /* Exit with usage if they didn't give arguments */
    if (argcount < 2)
    {
        printf("Usage:  whereis <file list>");
        return 1;
    }

    /* Else constructed the path for the root directory ('/' will be added later) */
    buf[0] = disk + 'A';
    buf[1] = ':';
    buf[2] = 0;

    /* And scan through it */
    scandir(buf);

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -