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

标签 c linux file-access

我有一个文件与我的 .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 it\r\n");
        nodeidfile = fopen("NodeIDs","w");
        fclose(nodeidfile);
    }

    nodeidfile = fopen("NodeIDs","r");

    if (nodeidfile == NULL)
        return -1;

    printf("file found\r\n");
    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 it\r\n");
        nodeidfile = fopen("NodeIDs","w");
        fclose(nodeidfile);
        return 0;
    }

    printf("file found\r\n");
    fseek(nodeidfile,0,SEEK_END);
    len = ftell(nodeidfile);
    fclose(nodeidfile);

    return 0; /* should return len? */
}

关于c - 存在文件的无法解释的文件 NULL 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57163094/

相关文章:

linux - 接手在 EC2 上运行的项目并遇到访问问题

linux - 从 variable1 中查找占位符 {} sed 并放入 variable2

Android Q : java. io.FileNotFoundException:/proc/self/net/dev:打开失败:EACCES(权限被拒绝)

c++ - 使用Direct2D绘制样条线

c++ - C代码意外成功

c++ - C/C++ 静态库与动态库示例

PHP代码通过权限限制成员访问

c - 如何调用以结构体作为参数的函数?

linux - 检查字符串长度 - Linux

concurrency - 如何在 rust 中执行线程安全 IO 和缓存到文件?