pfopen.c

来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 74 行

C
74
字号
/* *  Written and released to the public domain by David Engel. * *  This function attempts to open a file which may be in any of *  several directories.  It is particularly useful for opening *  configuration files.  For example, PROG.EXE can easily open *  PROG.CFG (which is kept in the same directory) by executing: * *      cfg_file = pfopen("PROG.CFG", "r", getenv("PATH")); * *  NULL is returned if the file can't be opened. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "snpdosys.h"FILE *pfopen(const char *name, const char *mode, const char *dirs){    char *ptr;    char *tdirs;    FILE *file = NULL;    if (dirs == NULL || dirs[0] == '\0')        return NULL;    if ((tdirs = malloc(strlen(dirs)+1)) == NULL)        return NULL;    strcpy(tdirs, dirs);    for (ptr = strtok(tdirs, SEP_CHARS); file == NULL && ptr != NULL;        ptr = strtok(NULL, SEP_CHARS))    {        size_t len;        char work[FILENAME_MAX];        strcpy(work, ptr);        len = strlen(work);        if (len && work[len-1] != '/' && work[len-1] != '\\')            strcat(work, "/");        strcat(work, name);        file = fopen(work, mode);    }    free(tdirs);    return file;}#ifdef TESTint main(int argc, char **argv){    FILE *file;    if (argc != 4)    {        fprintf(stderr, "usage: pfopen name mode dirs\n");        exit(1);    }    file = pfopen(argv[1], argv[2], argv[3]);    printf("%s \"%s\" with mode \"%s\"\n", (file == NULL) ?        "Could not open" : "Opened", argv[1], argv[2]);    return 0;}#endif /* TEST */

⌨️ 快捷键说明

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