资源管理器中操作集和socket的好像不同?

socket的操作集为

struct proto_ops {
   int   family;
   int   (*release)      (struct socket *sock);
   int   (*bind)         (struct socket *sock, struct sockaddr *umyaddr,                          int sockaddr_len);
   int   (*connect)      (struct socket *sock, struct sockaddr *uservaddr,                         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 *uaddr,                          int *usockaddr_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   (*listen)       (struct socket *sock, int len);
  int   (*shutdown)     (struct socket *sock, int flags);
  int   (*setsockopt)   (struct socket *sock, int level, int optname,                          char *optval, int optlen);
  int   (*getsockopt)   (struct socket *sock, int level, int optname,                          char *optval, int *optlen);
int   (*sendmsg)      (struct socket *sock, struct msghdr *m, int  total_len, struct scm_cookie *scm);
int   (*recvmsg)      (struct socket *sock, struct msghdr *m, int total_len, int flags, struct scm_cookie *scm);
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);
};

而qnx中资源管理器提供的connet和io操作集是

typedef struct _resmgr_connect_funcs {
	unsigned	nfuncs;
	int			(*open)(resmgr_context_t *ctp, io_open_t *msg, RESMGR_HANDLE_T *handle, void *extra);
	int			(*unlink)(resmgr_context_t *ctp, io_unlink_t *msg, RESMGR_HANDLE_T *handle, void *reserved);
	int			(*rename)(resmgr_context_t *ctp, io_rename_t *msg, RESMGR_HANDLE_T *handle, io_rename_extra_t *extra);
	int			(*mknod)(resmgr_context_t *ctp, io_mknod_t *msg, RESMGR_HANDLE_T *handle, void *reserved);
	int			(*readlink)(resmgr_context_t *ctp, io_readlink_t *msg, RESMGR_HANDLE_T *handle, void *reserved);
	int			(*link)(resmgr_context_t *ctp, io_link_t *msg, RESMGR_HANDLE_T *handle, io_link_extra_t *extra);
	int			(*unblock)(resmgr_context_t *ctp, io_pulse_t *msg, RESMGR_HANDLE_T *handle, void *reserved);
	int			(*mount)(resmgr_context_t *ctp, io_mount_t *msg, RESMGR_HANDLE_T *handle, io_mount_extra_t *extra);
} resmgr_connect_funcs_t;

typedef struct _resmgr_io_funcs {
	unsigned	nfuncs;
	int			(*read)(resmgr_context_t *ctp, io_read_t *msg, RESMGR_OCB_T *ocb);
	int			(*write)(resmgr_context_t *ctp, io_write_t *msg, RESMGR_OCB_T *ocb);
	int			(*close_ocb)(resmgr_context_t *ctp, void *reserved, RESMGR_OCB_T *ocb);
	int			(*stat)(resmgr_context_t *ctp, io_stat_t *msg, RESMGR_OCB_T *ocb);
	int			(*notify)(resmgr_context_t *ctp, io_notify_t *msg, RESMGR_OCB_T *ocb);
	int			(*devctl)(resmgr_context_t *ctp, io_devctl_t *msg, RESMGR_OCB_T *ocb);
	int			(*unblock)(resmgr_context_t *ctp, io_pulse_t *msg, RESMGR_OCB_T *ocb);
	int			(*pathconf)(resmgr_context_t *ctp, io_pathconf_t *msg, RESMGR_OCB_T *ocb);
	int			(*lseek)(resmgr_context_t *ctp, io_lseek_t *msg, RESMGR_OCB_T *ocb);
	int			(*chmod)(resmgr_context_t *ctp, io_chmod_t *msg, RESMGR_OCB_T *ocb);
	int			(*chown)(resmgr_context_t *ctp, io_chown_t *msg, RESMGR_OCB_T *ocb);
	int			(*utime)(resmgr_context_t *ctp, io_utime_t *msg, RESMGR_OCB_T *ocb);
	int			(*openfd)(resmgr_context_t *ctp, io_openfd_t *msg, RESMGR_OCB_T *ocb);
	int			(*fdinfo)(resmgr_context_t *ctp, io_fdinfo_t *msg, RESMGR_OCB_T *ocb);
	int			(*lock)(resmgr_context_t *ctp, io_lock_t *msg, RESMGR_OCB_T *ocb);
	int			(*space)(resmgr_context_t *ctp, io_space_t *msg, RESMGR_OCB_T *ocb);
	int			(*shutdown)(resmgr_context_t *ctp, io_shutdown_t *msg, RESMGR_OCB_T *ocb);
	int			(*mmap)(resmgr_context_t *ctp, io_mmap_t *msg, RESMGR_OCB_T *ocb);
	int			(*msg)(resmgr_context_t *ctp, io_msg_t *msg, RESMGR_OCB_T *ocb);
	int			(*reserved)(resmgr_context_t *ctp, void *msg, RESMGR_OCB_T *ocb);
	int			(*dup)(resmgr_context_t *ctp, io_dup_t *msg, RESMGR_OCB_T *ocb);
	int			(*close_dup)(resmgr_context_t *ctp, io_close_t *msg, RESMGR_OCB_T *ocb);
	int			(*lock_ocb)(resmgr_context_t *ctp, void *reserved, RESMGR_OCB_T *ocb);
	int			(*unlock_ocb)(resmgr_context_t *ctp, void *reserved, RESMGR_OCB_T *ocb);
	int			(*sync)(resmgr_context_t *ctp, io_sync_t *msg, RESMGR_OCB_T *ocb);
	int			(*power)(resmgr_context_t *ctp, io_power_t *msg, RESMGR_OCB_T *ocb);
} resmgr_io_funcs_t;

2个好像有部分对应不上?

如果你可以access到F27上的源码,可以去那里看一下libsocket。

libsocket的源码曾径是公开的,在网上搜一下,或许可以找到.