1

我在 2.6.16-rc3 下面有一个小程序,它使用忙盒(在 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
4

1 回答 1

8

您没有遵守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);

如您所见,您忘记包含正确的标题,并且open()还接受了一个标志参数,您将在其中声明读/写权限等。由于这是布局,您将获得一个神秘的参数传递给open(),这就是当时在堆栈或寄存器中。

于 2011-09-20T14:41:50.263 回答