gpt4 book ai didi

c - 为什么打开的描述符在程序退出时没有关闭?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:47 25 4
gpt4 key购买 nike

我在 2.6.16-rc3 下面有一个小程序,它使用 busy box(在 jffs2 文件系统上)。如果我多次运行该程序,它会从第二次开始失败。当程序退出时,描述符应该自动关闭,下次它应该重新开始,对吧?

为什么我有时会得到 -1? (注意 - 在我的 Fedora Linux PC 上,它工作正常)

root@badge 07:29:32 ~ >touch Hello.txt
root@badge 07:29:37 ~ >./a.out
FP = 3
root@badge 07:29:38 ~ >./a.out
FP = -1
root@badge 07:29:40 ~ >./a.out
FP = 3
root@badge 07:29:41 ~ >./a.out
FP = -1
root@badge 07:29:42 ~ >./a.out
FP = 3
root@badge 07:29:43 ~ >./a.out
FP = 3
root@badge 07:29:43 ~ >./a.out
FP = -1
root@badge 07:29:45 ~ >

程序:

#include <stdio.h>
int main()
{
int fp;
fp = open ("Hello.txt");
printf("FP = %d\n", fp);
return 0; // No close() is used. On exit, it shall be closed.
}

文本文件:

    -rw-r--r--    1 root     root            0 Sep 20 07:22 Hello.txt

最佳答案

您没有遵守 open() 调用的约定。手册页(在 Linux 上)说明了这一点:

SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

如您所见,您忘记了包含正确的 header ,并且 open() 还采用了一个标志参数,您可以在其中声明读/写权限等。正如布局所示你会得到一个传递给 open() 的神秘参数,这是当时堆栈或寄存器中的任何内容。

关于c - 为什么打开的描述符在程序退出时没有关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com