存在文件的无法解释的文件 NULL 指针
Unexplained file NULL pointer for file that exists
我有一个文件与我的 .c 和我的可执行文件位于 Linux 下的同一目录中。 100 次中有 99 次它将正确打开文件而不是 return 空指针。但是这100次中有1次会return一个空指针,代码如下所示。为什么我有时只会得到这个文件的空指针?为什么当我确实得到空指针时,如果 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 和我的可执行文件位于 Linux 下的同一目录中。 100 次中有 99 次它将正确打开文件而不是 return 空指针。但是这100次中有1次会return一个空指针,代码如下所示。为什么我有时只会得到这个文件的空指针?为什么当我确实得到空指针时,如果 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? */
}