mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-10-17 16:32:14 +08:00
[libc][posix] 解决RT_LIBC_USING_FILEIO范围过大的问题
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
|
||||
int libc_system_init(void)
|
||||
{
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
#ifdef RT_USING_POSIX
|
||||
rt_device_t dev_console;
|
||||
|
||||
dev_console = rt_console_get_device();
|
||||
@@ -28,7 +28,7 @@ int libc_system_init(void)
|
||||
{
|
||||
libc_stdio_set_console(dev_console->parent.name, O_RDWR);
|
||||
}
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
#endif /* RT_USING_POSIX */
|
||||
|
||||
#if defined RT_USING_PTHREADS && !defined RT_USING_COMPONENTS_INIT
|
||||
pthread_system_init();
|
||||
|
@@ -15,10 +15,10 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
int libc_system_init(void);
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
#ifdef RT_USING_POSIX
|
||||
int libc_stdio_get_console(void);
|
||||
int libc_stdio_set_console(const char* device_name, int mode);
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
#endif /* RT_USING_POSIX */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -8,15 +8,15 @@
|
||||
* 2017/10/15 bernard the first version
|
||||
*/
|
||||
#include <rtthread.h>
|
||||
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include "libc.h"
|
||||
|
||||
#define STDIO_DEVICE_NAME_MAX 32
|
||||
|
||||
#ifdef RT_LIBC_USING_FILEIO
|
||||
#include <stdlib.h>
|
||||
|
||||
static FILE* std_console = NULL;
|
||||
|
||||
int libc_stdio_set_console(const char* device_name, int mode)
|
||||
@@ -28,9 +28,18 @@ int libc_stdio_set_console(const char* device_name, int mode)
|
||||
snprintf(name, sizeof(name) - 1, "/dev/%s", device_name);
|
||||
name[STDIO_DEVICE_NAME_MAX - 1] = '\0';
|
||||
|
||||
if (mode == O_RDWR) file_mode = "r+";
|
||||
else if (mode == O_WRONLY) file_mode = "wb";
|
||||
else file_mode = "rb";
|
||||
if (mode == O_RDWR)
|
||||
{
|
||||
file_mode = "r+";
|
||||
}
|
||||
else if (mode == O_WRONLY)
|
||||
{
|
||||
file_mode = "wb";
|
||||
}
|
||||
else
|
||||
{
|
||||
file_mode = "rb";
|
||||
}
|
||||
|
||||
fp = fopen(name, file_mode);
|
||||
if (fp)
|
||||
@@ -80,4 +89,34 @@ int libc_stdio_get_console(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#elif defined(RT_USING_POSIX)
|
||||
#include <unistd.h>
|
||||
static int std_fd = -1;
|
||||
|
||||
int libc_stdio_set_console(const char* device_name, int mode)
|
||||
{
|
||||
int fd;
|
||||
char name[STDIO_DEVICE_NAME_MAX];
|
||||
|
||||
snprintf(name, sizeof(name) - 1, "/dev/%s", device_name);
|
||||
name[STDIO_DEVICE_NAME_MAX - 1] = '\0';
|
||||
|
||||
fd = open(name, mode, 0);
|
||||
if (fd >= 0)
|
||||
{
|
||||
if (std_fd >= 0)
|
||||
{
|
||||
close(std_fd);
|
||||
}
|
||||
std_fd = fd;
|
||||
}
|
||||
|
||||
return std_fd;
|
||||
}
|
||||
|
||||
int libc_stdio_get_console(void)
|
||||
{
|
||||
return std_fd;
|
||||
}
|
||||
|
||||
#endif /* RT_LIBC_USING_FILEIO */
|
||||
|
Reference in New Issue
Block a user