You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.4 KiB
99 lines
2.4 KiB
/* |
|
* Copyright (C) 2013 INRIA. |
|
* |
|
* This file is subject to the terms and conditions of the GNU Lesser |
|
* General Public License v2.1. See the file LICENSE in the top level |
|
* directory for more details. |
|
*/ |
|
|
|
/** |
|
* @addtogroup posix |
|
* @{ |
|
*/ |
|
|
|
/** |
|
* @file |
|
* @brief Unifies diverse identifiers of RIOT to POSIX like file descriptors. |
|
* |
|
* @author Martine Lenders <mlenders@inf.fu-berlin.de> |
|
* @author Christian Mehlis <mehlis@inf.fu-berlin.de> |
|
*/ |
|
#ifndef FD_H |
|
#define FD_H |
|
#include <stdlib.h> |
|
#include <sys/types.h> |
|
#include "kernel_types.h" |
|
#include "cpu.h" |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/** |
|
* File descriptor table. |
|
*/ |
|
typedef struct { |
|
/** private status of this fd_t */ |
|
int internal_active; |
|
|
|
/** Stores the RIOT internal value for the file descriptor (not POSIX). */ |
|
int internal_fd; |
|
|
|
/** |
|
* Read *n* bytes into *buf* from *fd*. Return the |
|
* number read, -1 for errors or 0 for EOF. |
|
*/ |
|
ssize_t (*read)(int fd, void *buf, size_t n); |
|
|
|
/** Write *n* bytes of *buf* to *fd*. Return the number written, or -1. */ |
|
ssize_t (*write)(int fd, const void *buf, size_t n); |
|
|
|
/** Close the file descriptor *fd*. */ |
|
int (*close)(int fd); |
|
} fd_t; |
|
|
|
/** |
|
* @brief Initializes file descriptors |
|
* |
|
* @return maximum number of available file descriptors. |
|
*/ |
|
int fd_init(void); |
|
|
|
/** |
|
* @brief Creates a new file descriptor. |
|
* |
|
* @param[in] internal_fd RIOT-internal identifier for the new FD. |
|
* @param[in] internal_read Function to read from new FD. |
|
* @param[in] internal_write Function to write into new FD. |
|
* @param[in] internal_close Function to close new FD. |
|
* |
|
* @return 0 on success, -1 otherwise. *errno* is set accordingly. |
|
*/ |
|
int fd_new(int internal_fd, ssize_t (*internal_read)(int, void *, size_t), |
|
ssize_t (*internal_write)(int, const void *, size_t), |
|
int (*internal_close)(int)); |
|
|
|
/** |
|
* @brief Gets the file descriptor table entry associated with file |
|
* descriptor *fd*. |
|
* |
|
* @param[in] fd A POSIX-like file descriptor. |
|
* |
|
* @return The file descriptor table entry associated with file descriptor |
|
*fd* or NULL if there is non. |
|
*/ |
|
fd_t *fd_get(int fd); |
|
|
|
/** |
|
* @brief Removes file descriptor table entry associated with *fd* from table. |
|
* |
|
* @param[in] fd A POSIX-like file descriptor. |
|
*/ |
|
void fd_destroy(int fd); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif /* FD_H */ |
|
/** @} */
|
|
|