ChinaUnix.net 首页 | 博客 | Linux | 论坛 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 沙龙 | 搜索
Linux首页 | Linux论坛 | 论坛精华 | 开源新闻 | 技术文章 | 专题专栏 | 新手指南 | 迁移方案 | 产品方案 | 开源项目 | 开源图书 | 软件下载 | 人才招聘 | Linux博客
  搜索

  产品与方案
·中科红旗全面打造现代化邮政体系
·红旗助力“网上审批服务” 推动电子政务
·红旗正版化开创呼和浩特网吧建设新起点
·红旗Linux助信息产业部邮件服务器“快跑”
·中标普华Linux 为电子政务信息化保驾护航
·中标普华Linux助力基金产业
·中标普华Office率先支持UOF标准
·中标普华邮件系统助力西藏政府信息化建设
·红旗Linux助力国库集中支付系统改革
·红旗助中信卫星 掀起GIS通信应用风暴
·红旗软件助力烟草总局 全面建设“数字烟草”
·红旗助力“信访阳光工程”打造畅通信访渠道
·红帽联合FIS发布下一代实时核心银行平台
·红旗助力金盾 打造全无忧出入境信息系统
·红旗Linux全力打造中国邮政总局名址信息库
·爱尔兰证交所从Unix迁移到红帽企业Linux
·一流的意大利银行选择使用红帽企业Linux
·PLUS Finanzservice选择使用红帽企业Linux
·红帽助力TransACT Communications 公司
·法国零售业巨头Lapeyre采用Redhat Linux
·旅游预订网站选择使用红帽企业Linux
·马哈拉施特拉邦政府的红帽解决之道
·美国联邦政府案例
·红帽为慕尼黑展览会提供现代化集群系统
·Yuba郡用开源软件和红帽产品提高了效率
·红帽企业Linux助印度理工建立高性能计算中心
·采用红帽Linux 将系统维护时间缩短了65%
·从UNIX迁移到Linux使Peñoles公司获益非浅
·Hikal公司用红帽企业Linux开展任务关键的ERP项目
·KDE3.5.4新版本发布
·芝加哥商业交易所从Unix向Linux迁移
·南方基金管理有限公司成功案例 Red Hat Linux
·广东北电通讯设备有限公司成功案例
·挪威国家石油公司从UNIX迁移到红帽Linux,成本减半
·中央电视台CCTV动画部案例 Red Hat Linux

  图书

鸟哥的Linux私房菜基础学..


Linux程序设计.第3版


Linux设备驱动开发详解


  下载
·Endian Firewall
·linux kernel(Linux 内核)
·CentOS
·Fedora Core 6
·Scientific Linux
·Slackware 11.0
·Gentoo Linux
·ubuntu-6.10-i386服务器版本
·ubuntu-6.10-amd64服务器版
·ubuntu-6.10-i386桌面版
·ubuntu-6.10-amd64桌面版
·Engarde Linux
您的位置: Linux时代 > 技术文档 > 程序开发 >

Linux系统中主要的实用数据结构简介

日期:2007-01-30 作者:doorsir 来自:linux.chinaunix.net


本文列出了Linux主要的实用数据结构。

    block_dev_struct
 
  此结构用于向核心登记块设备,它还被buffer cache实用。所有此类结构都位于blk_dev数组中。

    struct blk_dev_struct {
    void (*request_fn)(void);
    struct request * current_request;
    struct request plug;
    struct tq_struct plug_tq;
    };
    buffer_head

  此结构包含关于buffer cache中一块缓存的信息。

    /* bh state bits */
    #define BH_Uptodate 0 /* 1 if the buffer contains valid data */
    #define BH_Dirty 1 /* 1 if the buffer is dirty */
    #define BH_Lock 2 /* 1 if the buffer is locked */
    #define BH_Req 3 /* 0 if the buffer has been invalidated */
    #define BH_Touched 4 /* 1 if the buffer has been touched (aging) */
    #define BH_Has_aged 5 /* 1 if the buffer has been aged (aging) */
    #define BH_Protected 6 /* 1 if the buffer is protected */
    #define BH_FreeOnIO 7 /* 1 to discard the buffer_head after IO */
    struct buffer_head {
    /* First cache line: */
    unsigned long b_blocknr; /* block number */
    kdev_t b_dev; /* device (B_FREE = free) */
    kdev_t b_rdev; /* Real device */
    unsigned long b_rsector; /* Real buffer location on disk */
    struct buffer_head *b_next; /* Hash queue list */
    struct buffer_head *b_this_page; /* circular list of buffers in one
    page */
    /* Second cache line: */
    unsigned long b_state; /* buffer state bitmap (above) */
    struct buffer_head *b_next_free;
    unsigned int b_count; /* users using this block */
    unsigned long b_size; /* block size */
    /* Non-performance-critical data follows. */
    char *b_data; /* pointer to data block */
    unsigned int b_list; /* List that this buffer appears */
    unsigned long b_flushtime; /* Time when this (dirty) buffer
    * should be written */
    unsigned long b_lru_time; /* Time when this buffer was
    * last used. */
    struct wait_queue *b_wait;
    struct buffer_head *b_prev; /* doubly linked hash list */
    struct buffer_head *b_prev_free; /* doubly linked list of buffers */
    struct buffer_head *b_reqnext; /* request queue */
    };
    device

  系统中每个网络设备都用一个设备数据结构来表示。

    struct device
    {
    /*
    * This is the first field of the "visible" part of this structure
    * (i.e. as seen by users in the "Space.c" file). It is the name
    * the interface.
    */
    char *name;
    /* I/O specific fields */
    unsigned long rmem_end; /* shmem "recv" end */
    unsigned long rmem_start; /* shmem "recv" start */
    unsigned long mem_end; /* shared mem end */
    unsigned long mem_start; /* shared mem start */
    unsigned long base_addr; /* device I/O address */
    unsigned char irq; /* device IRQ number */
    /* Low-level status flags. */
    volatile unsigned char start, /* start an operation */
    interrupt; /* interrupt arrived */
    unsigned long tbusy; /* transmitter busy */
    struct device *next;
    /* The device initialization function. Called only once. */
    int (*init)(struct device *dev);
    /* Some hardware also needs these fields, but they are not part of
    the usual set specified in Space.c. */
    unsigned char if_port; /* Selectable AUI,TP, */
    unsigned char dma; /* DMA channel */
    struct enet_statistics* (*get_stats)(struct device *dev);
    /*
    * This marks the end of the "visible" part of the structure. All
    * fields hereafter are internal to the system, and may change at
    * will (read: may be cleaned up at will).
    */
    /* These may be needed for future network-power-down code. */
    unsigned long trans_start; /* Time (jiffies) of last transmit */
    unsigned long last_rx; /* Time of last Rx */
    unsigned short flags; /* interface flags (BSD)*/
    unsigned short family; /* address family ID */
    unsigned short metric; /* routing metric */
    unsigned short mtu; /* MTU value */
    unsigned short type; /* hardware type */
    unsigned short hard_header_len; /* hardware hdr len */
    void *priv; /* private data */
    /* Interface address info. */
    unsigned char broadcast[MAX_ADDR_LEN];
    unsigned char pad;
    unsigned char dev_addr[MAX_ADDR_LEN];
    unsigned char addr_len; /* hardware addr len */
    unsigned long pa_addr; /* protocol address */
    unsigned long pa_brdaddr; /* protocol broadcast addr*/
    unsigned long pa_dstaddr; /* protocol P-P other addr*/
    unsigned long pa_mask; /* protocol netmask */
    unsigned short pa_alen; /* protocol address len */
    struct dev_mc_list *mc_list; /* M'cast mac addrs */
    int mc_count; /* No installed mcasts */
    struct ip_mc_list *ip_mc_list; /* IP m'cast filter chain */
    __u32 tx_queue_len; /* Max frames per queue */
    /* For load balancing driver pair support */
    unsigned long pkt_queue; /* Packets queued */
    struct device *slave; /* Slave device */
    struct net_alias_info *alias_info; /* main dev alias info */
    struct net_alias *my_alias; /* alias devs */
    /* Pointer to the interface buffers. */
    struct sk_buff_head buffs[DEV_NUMBUFFS];
    /* Pointers to interface service routines. */
    int (*open)(struct device *dev);
    int (*stop)(struct device *dev);
    int (*hard_start_xmit) (struct sk_buff *skb,
    struct device *dev);
    int (*hard_header) (struct sk_buff *skb,
    struct device *dev,
    unsigned short type,
    void *daddr,
    void *saddr,
    unsigned len);
    int (*rebuild_header)(void *eth,
    struct device *dev,
    unsigned long raddr,
    struct sk_buff *skb);
    void (*set_multicast_list)(struct device *dev);
    int (*set_mac_address)(struct device *dev,
    void *addr);
    int (*do_ioctl)(struct device *dev,
    struct ifreq *ifr,
    int cmd);
    int (*set_config)(struct device *dev,
    struct ifmap *map);
    void (*header_cache_bind)(struct hh_cache **hhp,
    struct device *dev,
    unsigned short htype,
    __u32 daddr);
    void (*header_cache_update)(struct hh_cache *hh,
    struct device *dev,
    unsigned char * haddr);
    int (*change_mtu)(struct device *dev,
    int new_mtu);
    struct iw_statistics* (*get_wireless_stats)(struct device *dev);
    };
    device_struct

  此结构被块设备和字符设备用来向核心登记(包含设备名称以及可对此设备进行的文件操作)。chrdevs和blkdevs中的每个有效分别表示一个字符设备和块设备。

    struct device_struct {
    const char * name;
    struct file_operations * fops;
    };
    file

  每个打开的文件、套接口都用此结构表示。

    struct file {
    mode_t f_mode;
    loff_t f_pos;
    unsigned short f_flags;
    unsigned short f_count;
    unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
    struct file *f_next, *f_prev;
    int f_owner; /* pid or -pgrp where SIGIO should be sent */
    struct inode * f_inode;
    struct file_operations * f_op;
    unsigned long f_version;
    void *private_data; /* needed for tty driver, and maybe others */
    };
    files_struct

  描叙被某进程打开的所有文件。

    struct files_struct {
    int count;
    fd_set close_on_exec;
    fd_set open_fds;
    struct file * fd[NR_OPEN];
    };
    fs_struct
    struct fs_struct {
    int count;
    unsigned short umask;
    struct inode * root, * pwd;
    };
    gendisk

  包含关于某个硬盘的信息。用于磁盘初始化与分区检查时。

    struct hd_struct {
    long start_sect;
    long nr_sects;
    };
    struct gendisk {
    int major; /* major number of driver */
    const char *major_name; /* name of major driver */
    int minor_shift; /* number of times minor is shifted to get real minor */
    int max_p; /* maximum partitions per device */
    int max_nr; /* maximum number of real devices */
    void (*init)(struct gendisk *);
    /* Initialization called before we do our thing */
    struct hd_struct *part; /* partition table */
    int *sizes; /* device size in blocks, copied to blk_size[] */
    int nr_real; /* number of real devices */
    void *real_devices; /* internal use */
    struct gendisk *next;
    };
    inode

  此VFS inode结构描叙磁盘上一个文件或目录的信息。

    struct inode {
    kdev_t i_dev;
    unsigned long i_ino;
    umode_t i_mode;
    nlink_t i_nlink;
    uid_t i_uid;
    gid_t i_gid;
    kdev_t i_rdev;
    off_t i_size;
    time_t i_atime;
    time_t i_mtime;
    time_t i_ctime;
    unsigned long i_blksize;
    unsigned long i_blocks;
    unsigned long i_version;
    unsigned long i_nrpages;
    struct semaphore i_sem;
    struct inode_operations *i_op;
    struct super_block *i_sb;
    struct wait_queue *i_wait;
    struct file_lock *i_flock;
    struct vm_area_struct *i_mmap;
    struct page *i_pages;
    struct dquot *i_dquot[MAXQUOTAS];
    struct inode *i_next, *i_prev;
    struct inode *i_hash_next, *i_hash_prev;
    struct inode *i_bound_to, *i_bound_by;
    struct inode *i_mount;
    unsigned short i_count;
    unsigned short i_flags;
    unsigned char i_lock;
    unsigned char i_dirt;
    unsigned char i_pipe;
    unsigned char i_sock;
    unsigned char i_seek;
    unsigned char i_update;
    unsigned short i_writecount;
    union {
    struct pipe_inode_info pipe_i;
    struct minix_inode_info minix_i;
    struct ext_inode_info ext_i;
    struct ext2_inode_info ext2_i;
    struct hpfs_inode_info hpfs_i;
    struct msdos_inode_info msdos_i;
    struct umsdos_inode_info umsdos_i;
    struct iso_inode_info isofs_i;
    struct nfs_inode_info nfs_i;
    struct xiafs_inode_info xiafs_i;
    struct sysv_inode_info sysv_i;
    struct affs_inode_info affs_i;
    struct ufs_inode_info ufs_i;
    struct socket socket_i;
    void *generic_ip;
    } u;
    };
    ipc_perm

  此结构描叙对一个系统V IPC对象的存取权限。

    struct ipc_perm
    {
    key_t key;
    ushort uid; /* owner euid and egid */
    ushort gid;
    ushort cuid; /* creator euid and egid */
    ushort cgid;
    ushort mode; /* access modes see mode flags below */
    ushort seq; /* sequence number */
    };
    irqaction

  用来描叙系统的中断处理过程。

    struct irqaction {
    void (*handler)(int, void *, struct pt_regs *);
    unsigned long flags;
    unsigned long mask;
    const char *name;
    void *dev_id;
    struct irqaction *next;
    };
    linux_binfmt

  以上就是Linux中主要的数据结构及其功能,要想把Linux学好必须掌握这些数据结构。

本文被浏览



 相关新闻

新桌面管理程序亮相Mandirva 2007.12007-01-25 10:44:27
用C语言实现Ping程序功能2006-12-25 14:45:38
程序编译中如何调试configure2006-12-13 17:48:00
用Perl 来创建可重用的Web应用程序2006-12-07 15:38:37
3步骤移植Solaris到Linux Java程序属此范畴2006-12-05 09:07:34
将 xinetd 程序用于系统管理2006-11-28 16:24:54
FREEBSD下使用crunch集成编译程序2006-11-27 16:12:19
从源代码开始升级应用程序2006-11-24 16:21:20


 相关评论
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 免费注册

Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号