- 论坛徽章:
- 0
|
结构赋值的时候用位段,这样做有什么好处么?看着晕,不解其意思,望指教。
如:
内核中的:- struct proto_ops {
- int family;
- struct module *owner;
- int (*release) (struct socket *sock);
- int (*bind) (struct socket *sock,
- struct sockaddr *myaddr,
- int sockaddr_len);
- int (*connect) (struct socket *sock,
- struct sockaddr *vaddr,
- int sockaddr_len, int flags);
- int (*socketpair)(struct socket *sock1,
- struct socket *sock2);
- int (*accept) (struct socket *sock,
- struct socket *newsock, int flags);
- int (*getname) (struct socket *sock,
- struct sockaddr *addr,
- int *sockaddr_len, int peer);
- unsigned int (*poll) (struct file *file, struct socket *sock,
- struct poll_table_struct *wait);
- int (*ioctl) (struct socket *sock, unsigned int cmd,
- unsigned long arg);
- int (*compat_ioctl) (struct socket *sock, unsigned int cmd,
- unsigned long arg);
- int (*listen) (struct socket *sock, int len);
- int (*shutdown) (struct socket *sock, int flags);
- int (*setsockopt)(struct socket *sock, int level,
- int optname, char __user *optval, int optlen);
- int (*getsockopt)(struct socket *sock, int level,
- int optname, char __user *optval, int __user *optlen);
- int (*compat_setsockopt)(struct socket *sock, int level,
- int optname, char __user *optval, int optlen);
- int (*compat_getsockopt)(struct socket *sock, int level,
- int optname, char __user *optval, int __user *optlen);
- int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
- struct msghdr *m, size_t total_len);
- int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
- struct msghdr *m, size_t total_len,
- int flags);
- int (*mmap) (struct file *file, struct socket *sock,
- struct vm_area_struct * vma);
- ssize_t (*sendpage) (struct socket *sock, struct page *page,
- int offset, size_t size, int flags);
- ssize_t (*splice_read)(struct socket *sock, loff_t *ppos,
- struct pipe_inode_info *pipe, size_t len, unsigned int flags);
- };
复制代码 这样赋值:- struct proto_ops filter_iocontrol_proto_ops = {
- family: PF_FILTER_IOCONTROL,
- release: filter_iocontrol_release,
- ioctl: filter_iocontrol_ioctl,
- bind: sock_no_bind,
- connect: sock_no_connect,
- socketpair: sock_no_socketpair,
- accept: sock_no_accept,
- getname: sock_no_getname,
- poll: sock_no_poll,
- listen: sock_no_listen,
- shutdown: sock_no_shutdown,
- setsockopt: sock_no_setsockopt,
- getsockopt: sock_no_getsockopt,
- sendmsg: sock_no_sendmsg,
- recvmsg: sock_no_recvmsg,
- mmap: sock_no_mmap
- };
复制代码 |
|