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 *
在源文件中哪里可以找到类型 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 *