gpt4 book ai didi

c - 我想知道 struct FILE 的内部成员,最新的

转载 作者:IT王子 更新时间:2023-10-29 00:24:24 27 4
gpt4 key购买 nike

当我读到 K&R 的 The C programming Language 第 176 页时,我非常兴奋。我找到了 struct FILE(我正在搜索的)的所有成员,知道它是如何工作的真是太棒了。但是你猜怎么着,gcc 提示说,错误:“FILE”没有名为“fd”的成员。这意味着现在情况发生了变化,我用谷歌搜索但找不到。请帮忙,提前谢谢你。

我可以使用 fileno() 来获取文件描述符,但我讨厌在抽象级别上工作。

int
main ( int argc, char **argv ){

FILE *fp = fopen ("ct.c", "r");
printf ("%i", fp->fd);

return 0;
}

最佳答案

您需要查看 C 库的源代码。

既然你提到了 gcc 和 Linux,你可能正在使用 GNU libc,它当然是免费软件。

This file说:

/* The opaque type of streams.  This is the definition used elsewhere.  */
typedef struct _IO_FILE __FILE;

this file声明 _IO_FILE 结构:

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

/* The following pointers correspond to the C++ streambuf protocol. */
/* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
char* _IO_read_ptr; /* Current read pointer */
char* _IO_read_end; /* End of get area. */
char* _IO_read_base; /* Start of putback+get area. */
char* _IO_write_base; /* Start of put area. */
char* _IO_write_ptr; /* Current put pointer. */
char* _IO_write_end; /* End of put area. */
char* _IO_buf_base; /* Start of reserve area. */
char* _IO_buf_end; /* End of reserve area. */
/* The following fields are used to support backing up and undo. */
char *_IO_save_base; /* Pointer to start of non-current get area. */
char *_IO_backup_base; /* Pointer to first valid character of backup area */
char *_IO_save_end; /* Pointer to end of non-current get area. */

struct _IO_marker *_markers;

struct _IO_FILE *_chain;

int _fileno;
#if 0
int _blksize;
#else
int _flags2;
#endif
_IO_off_t _old_offset; /* This used to be _offset but it's too small. */

#define __HAVE_COLUMN /* temporary */
/* 1+column number of pbase(); 0 is unknown. */
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];

/* char* _save_gptr; char* _save_egptr; */

_IO_lock_t *_lock;
#ifdef _IO_USE_OLD_IO_FILE
};

上述内容可能来自“真正的”生产质量库,比 K&R 中使用的示例稍微复杂一些。而且,当然,您不能使用它,因为它是库内部的,FILE 是一种不透明类型,正如它所说的那样。

关于c - 我想知道 struct FILE 的内部成员,最新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209087/

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