⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libio.h

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 H
📖 第 1 页 / 共 2 页
字号:
};/* *  Valid RTEMS file systems options */typedef enum{  RTEMS_FILESYSTEM_READ_ONLY,  RTEMS_FILESYSTEM_READ_WRITE,  RTEMS_FILESYSTEM_BAD_OPTIONS} rtems_filesystem_options_t;/* *  An open file data structure, indexed by 'fd' *  TODO: *     should really have a separate per/file data structure that this *     points to (eg: size, offset, driver, pathname should be in that) */struct rtems_libio_tt {    rtems_driver_name_t              *driver;    off_t                             size;      /* size of file */    off_t                             offset;    /* current offset into file */    unsigned32                        flags;    rtems_filesystem_location_info_t  pathinfo;    Objects_Id                        sem;          unsigned32                        data0;     /* private to "driver" */    void                             *data1;     /* ... */    void                             *file_info; /* used by file handlers */    rtems_filesystem_file_handlers_r *handlers;  /* type specific handlers */};/* *  param block for read/write *  Note: it must include 'offset' instead of using iop's offset since *        we can have multiple outstanding i/o's on a device. */typedef struct {    rtems_libio_t          *iop;    off_t                   offset;    unsigned8              *buffer;    unsigned32              count;    unsigned32              flags;    unsigned32              bytes_moved;} rtems_libio_rw_args_t;/* *  param block for open/close */typedef struct {    rtems_libio_t          *iop;    unsigned32              flags;    unsigned32              mode;} rtems_libio_open_close_args_t;/* *  param block for ioctl */typedef struct {    rtems_libio_t          *iop;    unsigned32              command;    void                   *buffer;    unsigned32              ioctl_return;} rtems_libio_ioctl_args_t;/* *  Values for 'flag' */#define LIBIO_FLAGS_NO_DELAY      0x0001  /* return immediately if no data */#define LIBIO_FLAGS_READ          0x0002  /* reading */#define LIBIO_FLAGS_WRITE         0x0004  /* writing */#define LIBIO_FLAGS_OPEN          0x0100  /* device is open */#define LIBIO_FLAGS_APPEND        0x0200  /* all writes append */#define LIBIO_FLAGS_CREATE        0x0400  /* create file */#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800  /* close on process exec() */#define LIBIO_FLAGS_READ_WRITE    (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)void rtems_libio_init(void);/* *  External I/O handlers */typedef int (*rtems_libio_open_t)(  const char  *pathname,  unsigned32  flag,  unsigned32  mode);typedef int (*rtems_libio_close_t)(  int  fd);typedef int (*rtems_libio_read_t)(  int         fd,  void       *buffer,  unsigned32  count);typedef int (*rtems_libio_write_t)(  int         fd,  const void *buffer,  unsigned32  count);typedef int (*rtems_libio_ioctl_t)(  int         fd,  unsigned32  command,  void       *buffer);typedef int (*rtems_libio_lseek_t)(  int    fd,  off_t  offset,  int    whence);/* *  The following macros are used to build up the permissions sets *  used to check permissions.  These are similar in style to the *  mode_t bits and should stay compatible with them. */#define RTEMS_LIBIO_PERMS_READ   S_IROTH#define RTEMS_LIBIO_PERMS_WRITE  S_IWOTH#define RTEMS_LIBIO_PERMS_RDWR   (S_IROTH|S_IWOTH)#define RTEMS_LIBIO_PERMS_EXEC   S_IXOTH#define RTEMS_LIBIO_PERMS_SEARCH RTEMS_LIBIO_PERMS_EXEC#define RTEMS_LIBIO_PERMS_RWX    S_IRWXO/* *  Macros */#if 0#define rtems_filesystem_make_dev_t( _major, _minor ) \  ((((dev_t)(_major)) << 32) | (dev_t)(_minor))#define rtems_filesystem_dev_major_t( _dev ) \  (rtems_device_major_number) ((_dev) >> 32)#define rtems_filesystem_dev_minor_t( _dev ) \  (rtems_device_minor_number) ((_dev) & 0xFFFFFFFF)#else#include <unistd.h>union __rtems_dev_t {  dev_t device;  struct {     rtems_device_major_number major;     rtems_device_minor_number minor;  } __overlay;};static inline dev_t rtems_filesystem_make_dev_t(   rtems_device_major_number _major,   rtems_device_minor_number _minor){  union __rtems_dev_t temp;  temp.__overlay.major = _major;  temp.__overlay.minor = _minor;  return temp.device;}static inline rtems_device_major_number rtems_filesystem_dev_major_t(  dev_t device){  union __rtems_dev_t temp;  temp.device = device;  return temp.__overlay.major;}static inline rtems_device_minor_number rtems_filesystem_dev_minor_t(  dev_t device){  union __rtems_dev_t temp;  temp.device = device;  return temp.__overlay.minor;}#endif#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \  do { \    (_major) = rtems_filesystem_dev_major_t ( _dev ); \    (_minor) = rtems_filesystem_dev_minor_t( _dev ); \  } while(0)/* * Verifies that the permission flag is valid. */#define rtems_libio_is_valid_perms( _perm )     \ (~ ((~RTEMS_LIBIO_PERMS_RWX) & _perm ))/* *  Prototypes for filesystem */void rtems_filesystem_initialize( void );/* * Callbacks from TERMIOS routines to device-dependent code */#include <termios.h>typedef struct rtems_termios_callbacks {  int    (*firstOpen)(int major, int minor, void *arg);  int    (*lastClose)(int major, int minor, void *arg);  int    (*pollRead)(int minor);  int    (*write)(int minor, const char *buf, int len);  int    (*setAttributes)(int minor, const struct termios *t);  int    (*stopRemoteTx)(int minor);  int    (*startRemoteTx)(int minor);  int    outputUsesInterrupts;} rtems_termios_callbacks;/* *  Device-independent TERMIOS routines */void rtems_termios_initialize (void);/* * CCJ: Change before opening a tty. Newer code from Eric is coming * so extra work to handle an open tty is not worth it. If the tty * is open, close then open it again. */rtems_status_code rtems_termios_bufsize (  int cbufsize,     /* cooked buffer size */  int raw_input,    /* raw input buffer size */  int raw_output    /* raw output buffer size */);rtems_status_code rtems_termios_open (  rtems_device_major_number      major,  rtems_device_minor_number      minor,  void                          *arg,  const rtems_termios_callbacks *callbacks);rtems_status_code rtems_termios_close(  void *arg);rtems_status_code rtems_termios_read(  void *arg);rtems_status_code rtems_termios_write(  void *arg);rtems_status_code rtems_termios_ioctl(  void *arg);int rtems_termios_enqueue_raw_characters(  void *ttyp,  char *buf,  int   len);int rtems_termios_dequeue_characters(  void *ttyp,  int   len);void rtems_termios_reserve_resources(  rtems_configuration_table *configuration,  rtems_unsigned32           number_of_devices);int unmount(  const char *mount_path);int mount(  rtems_filesystem_mount_table_entry_t **mt_entry,  rtems_filesystem_operations_table    *fs_ops,  rtems_filesystem_options_t            fsoptions,  char                                 *device,  char                                 *mount_point);/* *  Boot Time Mount Table Structure */typedef struct {  rtems_filesystem_operations_table     *fs_ops;  rtems_filesystem_options_t             fsoptions;  char                                  *device;  char                                  *mount_point;} rtems_filesystem_mount_table_t;extern rtems_filesystem_mount_table_t *rtems_filesystem_mount_table;extern int                             rtems_filesystem_mount_table_size;#endif /* _RTEMS_LIBIO_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -