C语言中的FILE类型(Linux)

FILE type in C language (Linux)

在源文件中哪里可以找到类型 FILE 的声明?

我在 stdio.h 中找不到它。我的意思是它的声明。 是int类型吗?文件描述?还是结构?

我需要在没有标准库的情况下在我的代码中实现它。

不完全是一个简洁的答案,但可以工作

像这样写一些程序说 program.c

#include <stdio.h>
int main() {
        FILE *fp;
        return 0;
}

使用调试符号编译

gcc program.c -g -o program

使用 gdb 查看类型

# gdb ./program
(gdb) b  main
(gdb) run
(gdb) ptype fp
type = struct _IO_FILE {
    int _flags;
    char *_IO_read_ptr;
    char *_IO_read_end;
    char *_IO_read_base;
    char *_IO_write_base;
    char *_IO_write_ptr;
    char *_IO_write_end;
    char *_IO_buf_base;
    char *_IO_buf_end;
    char *_IO_save_base;
    char *_IO_backup_base;
    char *_IO_save_end;
    struct _IO_marker *_markers;
    struct _IO_FILE *_chain;
    int _fileno;
    int _flags2;
    __off_t _old_offset;
    short unsigned int _cur_column;
    signed char _vtable_offset;
    char _shortbuf[1];
    _IO_lock_t *_lock;
    __off64_t _offset;
    void *__pad1;
    void *__pad2;
    void *__pad3;
    void *__pad4;
    size_t __pad5;
    int _mode;
    char _unused2[20];
} *

或勾选

/usr/include/stdio.h

typedef struct _IO_FILE FILE;

/usr/include/libio.h

struct _IO_FILE {
  int _flags;       /* High-order word is _IO_MAGIC; rest is flags. */
#define _IO_file_flags _flags
.
.
.
}

无论如何,正如@molbdnilo 指出的那样,它是非常具体的实现

为什么要在没有标准库的情况下实现呢?请尽可能使用标准库。

我想这会给你一个想法:

#ifndef _FILE_DEFINED
#define _FILE_DEFINED
typedef struct _iobuf
{
    char*   _ptr;
    int _cnt;
    char*   _base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char*   _tmpfname;
} FILE;
#endif  /* Not _FILE_DEFINED *