1

以下の2.6.16-rc3に、busy box(jffs2ファイルシステム上)を使用する小さなプログラムがあります。プログラムを複数回実行すると、2回目以降は失敗し始めます。プログラムが終了すると、記述子は自動的に閉じられ、次に新しく開始されますね。

なぜ私は時々-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 に答える