标签: fclose

如果我不在C程序中调用fclose()会发生什么?

首先,我知道用fopen()打开一个文件而不关闭它是非常不负责任和糟糕的形式.这只是纯粹的好奇心,所以请幽默我:)

我知道如果一个C程序打开一堆文件并且从不关闭它们中的任何一个,最终fopen()将开始失败.是否还有其他可能导致代码本身问题的副作用?例如,如果我有一个程序打开一个文件,然后退出而不关闭它,是否会导致运行该程序的人出现问题?这样的程序会泄漏任何内容(内存,文件句柄)吗?程序完成后,再次访问该文件会有问题吗?如果该程序连续多次运行会发生什么?

c file-io fopen fclose

57
推荐指数
4
解决办法
3万
查看次数

如果文件不存在,则创建一个文件 - C.

我希望我的程序打开一个文件,如果它存在,或者创建该文件.我正在尝试以下代码,但我在freopen.c上得到一个调试断言.我会不会更好地使用fclose然后立即fopen?

FILE *fptr;
    fptr = fopen("scores.dat", "rb+");
    if(fptr == NULL) //if file does not exist, create it
    {
        freopen("scores.dat", "wb", fptr);
    } 
Run Code Online (Sandbox Code Playgroud)

c fopen fclose freopen

41
推荐指数
2
解决办法
20万
查看次数

为什么glibc的fclose(NULL)会导致分段错误而不是返回错误?

根据手册页fclose(3):

返回值

成功完成后返回0.否则,EOF返回并设置全局变量errno以指示错误.在任何一种情况下fclose(),对流的任何进一步访问(包括另一次调用)都会导致未定义的行为.

错误

EBADF底层文件描述符fp无效.

fclose()函数也可能失败并设置errno为例程指定的任何错误close(2),write(2)fflush(3).

当然fclose(NULL)应该失败,但我希望它能够errno正常返回,而不是直接通过分段故障死亡.这种行为有什么原因吗?

提前致谢.

更新:我将把我的代码放在这里(strerror()特别是我正在努力).

FILE *not_exist = NULL;

not_exist = fopen("nonexist", "r");
if(not_exist == NULL){
    printError(errno);
}

if(fclose(not_exist) == EOF){
    printError(errno);
}
Run Code Online (Sandbox Code Playgroud)

c linux segmentation-fault fclose

19
推荐指数
4
解决办法
1万
查看次数

fopen(),fclose()究竟是如何工作的?

我只是想知道函数fopen,fclose,socket和closesocket.当调用fopen或打开套接字时,到底发生了什么(尤其是内存方式)?

打开文件/套接字而不关闭它们会导致内存泄漏吗?

第三,如何创建套接字,它们看起来像内存一样明智?

我也对操作系统(Windows)在读取套接字和发送数据方面的作用感兴趣.

c sockets windows fopen fclose

12
推荐指数
2
解决办法
2万
查看次数

文件关闭后FILE指针会发生什么?

我希望知道文件关闭后FILE指针会发生什么.它会是NULL吗?

基本上,我想在关闭文件之前检查文件是否已经关闭.

例如如下:

FILE *f;

if(f!=NULL)
{
  fclose(f);
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做,还是有其他方法可以解决这个问题?

c file fclose

11
推荐指数
2
解决办法
1万
查看次数

ipad app异常退出信号11:分段错误:11

我的应用程序异常退出信号11.我不知道这意味着什么.没有崩溃日志,调试器没有显示错误.该应用程序刚刚消失.

我得到了以下日志.

Apr 27 21:31:31 unknown Apollo[1408] <Warning>: bring tab <VUIWebController: 0x2dcf30> to front
Apr 27 21:31:31 unknown configd[29] <Notice>: jetsam: kernel termination snapshot being created
Apr 27 21:31:32 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x81d8]) Exited: Killed: 9
Apr 27 21:31:32 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.ihanghai.apollo[0x4f16]) Bug: launchd_core_logic.c:3795 (24506):0
Apr 27 21:31:32 unknown SpringBoard[33] <Warning>: Application 'Mail' exited abnormally with signal 9: Killed: 9
Apr 27 21:31:32 unknown com.apple.debugserver-50[1407] <Warning>: 1 [057f/1503]: error: ::read ( 4, 0x2ffc29f0, 1024 ) => -1 err = …
Run Code Online (Sandbox Code Playgroud)

iphone debugging fclose ipad

10
推荐指数
1
解决办法
2万
查看次数

如果 fclose() 失败,文件描述符是否仍然打开?

想象以下代码作为线程运行:

void *thread_worker(void *q) {
 for (;;) {
  int fd = some_queue_get(q);
  FILE *writer = fdopen(fd, "w");
  if (!writer) { perror("fdopen"; close(fd); continue; }
  // do something with writer

  if (fclose(writer) == EOF) {
   perror("fclose writer");
   // should fd be closed here?
   close(fd);
  }
}
Run Code Online (Sandbox Code Playgroud)

fclose(3) 可能因各种原因而失败 - 是否有保证/何时关闭底层文件描述符或之后它仍然打开?

  • 如果在冲洗失败时 fd 没有被 fclose 关闭,一个人会在没有额外关闭的情况下泄漏 fds。
  • 如果 fd 被 fclose 关闭,则额外的关闭可能会关闭由其他线程新打开的文件描述符。

c posix fclose

9
推荐指数
1
解决办法
133
查看次数

为什么会挂起/死锁?(视窗)

我有一个目录更改监视器进程,它从一组目录中的文件读取更新.我有另一个进程,对这些目录(测试程序)执行大量文件的小写操作.图大约100个目录,每个目录有10个文件,每秒约有500个文件被修改.

运行一段时间后,目录监视器进程挂起一个fclose()基本上拖尾文件的方法的调用.在这个方法中,我fopen()是文件,检查句柄是否有效,做一些搜索和读取,然后调用fclose().这些读取都由进程中的同一个线程执行.挂起后,线程永远不会进展.

我找不到任何关于为什么fclose()可能死锁而不是返回某种错误代码的好信息.文档确实提到了_fclose_nolock(),但似乎我没有(Visual Studio 2003).

调试和发布版本都会挂起.在调试版本中,我可以看到在返回之前挂起的fclose()调用_free_base().某种调用kernel32.dll => ntdll.dll => KernelBase.dll => ntdll.dll正在旋转.这是来自ntdll.dll的无限循环的程序集:

77CEB83F  cmp         dword ptr [edi+4Ch],0 
77CEB843  lea         esi,[ebx-8] 
77CEB846  je          77CEB85E 
77CEB848  mov         eax,dword ptr [edi+50h] 
77CEB84B  xor         dword ptr [esi],eax 
77CEB84D  mov         al,byte ptr [esi+2] 
77CEB850  xor         al,byte ptr [esi+1] 
77CEB853  xor         al,byte ptr [esi] 
77CEB855  cmp         byte ptr [esi+3],al 
77CEB858  jne         77D19A0B 
77CEB85E  mov         eax,200h 
77CEB863  cmp         word ptr [esi],ax 
77CEB866  ja …
Run Code Online (Sandbox Code Playgroud)

c++ windows deadlock fclose

8
推荐指数
1
解决办法
1573
查看次数

fclose()导致分段错误

我一直在尝试使用C语言进行简单的文件处理,我想确保使用此文件可以访问该文件

#include<stdio.h>

main()
{
    CheckFile();
}

int CheckFile()
{
    int checkfile=0;

    FILE *fp1;
    fp1 = fopen("users.sav","r");

    if(fp1==NULL)
    {
        fopen("users.sav","w");
        fclose(fp1);
    }   
    if(checkfile!=0)printf("\nERROR ACCESSING FILE!\nNow exiting program with exit code: %d\n",checkfile);exit(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后它显示

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

但如果文件已经预先存在(例如我手动创建或第二次运行程序时),则不会出现段错误

请帮忙.我需要这个在一周内完成的最终项目,我还没有掌握文件和指针.

我正在使用"gcc(Ubuntu/Linaro 4.8.1-10ubuntu9)4.8.1"

PS

我知道存在明显相似的问题,但请不要这样做.明白我已经开始编写了几个月,因此无法理解这些高级代码和内容.

PPS

我在另一个问题中看到了这个

在原始代码中无法保证fopen实际上正在工作,在这种情况下它将返回NULL并且fclose将不会被定义为行为.

那么我该如何检查它是否有效?

c file-io fopen segmentation-fault fclose

8
推荐指数
2
解决办法
2万
查看次数

PHP无法在fclose之后取消链接文件

我的脚本完成后我可以删除该文件,但是当它正在运行时我无法触摸它,即使在一个之后fclose().这是我正在尝试使用的代码:

    $Files = glob("$_SERVER[DOCUMENT_ROOT]/files/*.csv");

    $File = fopen($Files[0], "r");        

    //while (($Data = fgetcsv($File)) !== false) {...

    $i = 0;
    while (is_resource($File)) {
        $i && sleep(1);
        echo "Closing handle.\n";
        fclose($File);
        if (++$i > 5)
            die("Could not close handle.");
    }

foreach ($Files as $File) {
    $i = 0;
    while (file_exists($File)) {
        $i && sleep(1);
        echo "Deleting file.\n";
        @unlink($File);
        echo 'www-data@debian:~$ ', $Command = "rm -f '$File' 2>&1", "\n", shell_exec($Command);
        if (++$i > 5)
            die("Could not delete the file.");
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到我试图删除它 …

php fopen rm unlink fclose

8
推荐指数
1
解决办法
1518
查看次数

标签 统计

fclose ×10

c ×7

fopen ×5

file-io ×2

segmentation-fault ×2

windows ×2

c++ ×1

deadlock ×1

debugging ×1

file ×1

freopen ×1

ipad ×1

iphone ×1

linux ×1

php ×1

posix ×1

rm ×1

sockets ×1

unlink ×1