c - 存在的文件的无法解释的文件 NULL 指针



我有一个文件,它与我的 .c 和我在 Linux 下的可执行文件存在于同一个目录中。 100 次中有 99 次它将正确打开文件,并且不返回空指针。但是这 100 次中有 1 次它将返回一个空指针,代码如下所示。为什么我有时只会得到这个文件的空指针?为什么当我得到空指针时,如果 Linux 认为它不存在,它无法创建具有相同名称的文件?

int ID_Lookup(int serialNumber, int NodeID)
{
    FILE *nodeidfile = NULL;
    char temp[8];
    char *filebuff;
    int commapos, endpos;
    int fileserialnum = 0, id = 9, match = 0, x = 0, linechar = 0, y;
    size_t len = 0;
    nodeidfile = fopen("NodeIDs","r");
    if (nodeidfile == NULL)
    {
        printf("file not found, creating itrn");
        nodeidfile = fopen("NodeIDs","w");
        fclose(nodeidfile);
    }
    nodeidfile = fopen("NodeIDs","r");
    if (nodeidfile == NULL)
        return -1;
    printf("file foundrn");
    fseek(nodeidfile,0,SEEK_END);
    len = ftell(nodeidfile);
    fclose(nodeidfile);
    return 0;
}

如果 fopen 第一次成功,您将再次打开该文件(放弃第一个 FILE* - 您将无法再关闭第一个文件(。此系统最终会耗尽文件句柄。

您应该独立处理这两种情况。

int ID_Lookup(int serialNumber, int NodeID)
{
    FILE *nodeidfile = NULL;
    char temp[8];
    char *filebuff;
    int commapos, endpos;
    int fileserialnum = 0, id = 9, match = 0, x = 0, linechar = 0, y;
    size_t len = 0;
    nodeidfile = fopen("NodeIDs","r");
    if (nodeidfile == NULL)
    {
        printf("file not found, creating itrn");
        nodeidfile = fopen("NodeIDs","w");
        fclose(nodeidfile);
        return 0;
    }
    printf("file foundrn");
    fseek(nodeidfile,0,SEEK_END);
    len = ftell(nodeidfile);
    fclose(nodeidfile);
    return 0; /* should return len? */
}

最新更新