Add ioctl API and fix the read/write conflict issue with newlib's API.
This commit is contained in:
parent
74def7ed72
commit
455daf8e7a
|
@ -119,20 +119,29 @@ struct stat;
|
||||||
/* file api*/
|
/* file api*/
|
||||||
int open(const char *file, int flags, int mode);
|
int open(const char *file, int flags, int mode);
|
||||||
int close(int d);
|
int close(int d);
|
||||||
|
#ifdef RT_USING_NEWLIB
|
||||||
|
_READ_WRITE_RETURN_TYPE _EXFUN(read, (int __fd, void *__buf, size_t __nbyte));
|
||||||
|
_READ_WRITE_RETURN_TYPE _EXFUN(write, (int __fd, const void *__buf, size_t __nbyte));
|
||||||
|
#else
|
||||||
int read(int fd, void *buf, size_t len);
|
int read(int fd, void *buf, size_t len);
|
||||||
int write(int fd, const void *buf, size_t len);
|
int write(int fd, const void *buf, size_t len);
|
||||||
|
#endif
|
||||||
off_t lseek(int fd, off_t offset, int whence);
|
off_t lseek(int fd, off_t offset, int whence);
|
||||||
int rename(const char *from, const char *to);
|
int rename(const char *from, const char *to);
|
||||||
int unlink(const char *pathname);
|
int unlink(const char *pathname);
|
||||||
int stat(const char *file, struct stat *buf);
|
int stat(const char *file, struct stat *buf);
|
||||||
int fstat(int fildes, struct stat *buf);
|
int fstat(int fildes, struct stat *buf);
|
||||||
int statfs(const char *path, struct statfs *buf);
|
int fsync(int fildes);
|
||||||
|
int ioctl(int fildes, unsigned long cmd, void *data);
|
||||||
|
|
||||||
/* directory api*/
|
/* directory api*/
|
||||||
int rmdir(const char *path);
|
int rmdir(const char *path);
|
||||||
int chdir(const char *path);
|
int chdir(const char *path);
|
||||||
char *getcwd(char *buf, size_t size);
|
char *getcwd(char *buf, size_t size);
|
||||||
|
|
||||||
|
/* file system api */
|
||||||
|
int statfs(const char *path, struct statfs *buf);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -123,7 +123,11 @@ RTM_EXPORT(close);
|
||||||
* @return the actual read data buffer length. If the returned value is 0, it
|
* @return the actual read data buffer length. If the returned value is 0, it
|
||||||
* may be reach the end of file, please check errno.
|
* may be reach the end of file, please check errno.
|
||||||
*/
|
*/
|
||||||
|
#ifdef RT_USING_NEWLIB
|
||||||
|
_READ_WRITE_RETURN_TYPE _EXFUN(read, (int fd, void *buf, size_t len))
|
||||||
|
#else
|
||||||
int read(int fd, void *buf, size_t len)
|
int read(int fd, void *buf, size_t len)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
struct dfs_fd *d;
|
struct dfs_fd *d;
|
||||||
|
@ -163,7 +167,11 @@ RTM_EXPORT(read);
|
||||||
*
|
*
|
||||||
* @return the actual written data buffer length.
|
* @return the actual written data buffer length.
|
||||||
*/
|
*/
|
||||||
|
#ifdef RT_USING_NEWLIB
|
||||||
|
_READ_WRITE_RETURN_TYPE _EXFUN(write, (int fd, const void *buf, size_t len))
|
||||||
|
#else
|
||||||
int write(int fd, const void *buf, size_t len)
|
int write(int fd, const void *buf, size_t len)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
struct dfs_fd *d;
|
struct dfs_fd *d;
|
||||||
|
@ -405,6 +413,43 @@ int fsync(int fildes)
|
||||||
}
|
}
|
||||||
RTM_EXPORT(fsync);
|
RTM_EXPORT(fsync);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this function is a POSIX compliant version, which shall perform a variety of
|
||||||
|
* control functions on devices.
|
||||||
|
*
|
||||||
|
* @param fildes the file description
|
||||||
|
* @param cmd the specified command
|
||||||
|
* @param data represents the additional information that is needed by this
|
||||||
|
* specific device to perform the requested function.
|
||||||
|
*
|
||||||
|
* @return 0 on successful completion. Otherwise, -1 shall be returned and errno
|
||||||
|
* set to indicate the error.
|
||||||
|
*/
|
||||||
|
int ioctl(int fildes, unsigned long cmd, void *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct dfs_fd *d;
|
||||||
|
|
||||||
|
/* get the fd */
|
||||||
|
d = fd_get(fildes);
|
||||||
|
if (d == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_set_errno(-DFS_STATUS_EBADF);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = dfs_file_ioctl(d, cmd, data);
|
||||||
|
if (ret != DFS_STATUS_OK)
|
||||||
|
{
|
||||||
|
rt_set_errno(ret);
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
fd_put(d);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
RTM_EXPORT(ioctl);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this function is a POSIX compliant version, which will return the
|
* this function is a POSIX compliant version, which will return the
|
||||||
* information about a mounted file system.
|
* information about a mounted file system.
|
||||||
|
|
Loading…
Reference in New Issue