[嵌入式系统-64]:RT-Thread-组件:标准C库Libc

目录

LIBC 简介

1 LIBC 配平层

2 ISO/ANSI C 标准

3 POSIX 标准

3.1 IEEE Std 1003.1

3.2 IEEE Std. 1003.13

3.3 POSIX标准及RT-Thread实现情况




LIBC 简介

RT-Thread 提供的 LIBC (C library, C库),包含编译器内置 LIBC 配平层(LIBC leveling layer)和 POSIX 层三部分。布局如下图所示:

libc_structure

1 LIBC 配平层

LIBC 配平层负责对接编译器工具链内置LIBC的底层桩函数以及平衡不同编译器内置 LIBC API 实现程度的差异而设计,为上层 POSIX 层提供功能统一的接口,位于 components/libc/compiler 文件目录下。之所以需要配平,是由于 GCC (newlib)、Keil-MDK、IAR、Visual Studio (WIN32) 四个编译工具链内置 LIBC 所提供的标准 C 库函数支持程度不一样,LIBC 配平层负责将四种不同的编译链所提供的标准 C 库平衡到相同的水平。LIBC 配平层无需用户手动干预,会在编译工程时,根据用户所使用的的编译平台和工具链自动进行配平。保证上层无需区分使用何种编译平台和工具链的 LIBC ,使用通用的头文件即可引用 LIBC 的相关函数。

2 ISO/ANSI C 标准

ANSI C、ISO C、Standard C是指美国国家标准协会(ANSI)和国际标准化组织(ISO)对C语言发布的标准。历史上,这个名字专门用于指代此标准的原始版本,也是支持最好的版本(称为C89或C90)。使用C的软件开发者被鼓励遵循标准的要求,因为它鼓励使用跨平台的代码。C的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版亦被ANSI采纳,但名称ANSI C(而不是ISO C)仍被广泛使用。一些软件开发者使用名称ISO C,还有一些使用中立的名称Standard C。例如常说的C89 (ANSI X3.159-1989)、C99 (ISO/IEC 9899:1999)、C11 (ISO/IEC 9899:2011) 实际都是指该标准的不同版本。

该标准通常被编译器/工具链内置 LIBC 所支持,例如 Keil-MDK、IAR 等所提供的的内置 LIBC 都是满足该标准的。

3 POSIX 标准

可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。ISO/ANSI C 是 POSIX 的子集。

3.1 IEEE Std 1003.1

针对LIBC,目前广泛使用的 POSIX 标准是 1003.1 标准,全称为IEEE Std 1003.1(缩写写法为 POSIX.1)。IEEE Std 1003.1-2001、IEEE Std 1003.1-2008 等为 POSIX.1 在不同时期更新发布的版本。

3.2 IEEE Std. 1003.13

该标准是 POSIX 针对实时规范 (reatime profiles)。该标准是由 IEEE Std 1003.1 筛选而来,因此是其子集。IEEE Std. 1003.13 定义了四个子集:

  • Minimal:最小嵌入式子集规范 —— PSE51
  • Controller:工业控制器子集规范 —— PSE52
  • Dedicated:较大规模的嵌入式系统子集规范 —— PSE53
  • Multi-Purpose:具有实时性要求的大规模通用系统子集规范 —— PSE54

目前 RT-Thread 已经实现 PSE51 规范以及部分 PSE52 规范的内容。

3.3 POSIX标准及RT-Thread实现情况

FileAPIPSE51PSE52PSE53PSE54RT-Thread
<ctype.h>
isalnum()****
isalpha()****
isblank()****
iscntrl()****
isdigit()****
isgraph()****
islower()****
isprint()****
ispunct()****
isspace()****
isupper()****
isxdigit()****
tolower()****
toupper()****
<errno.h>
errno****
<fcntl.h>
open()****
creat()***
fcntl()***
posix_fadvise()*
posix_fallocate()*
<fenv.h>
feclearexcept()****
fegetenv()****
fegetexceptflag()****
fegetround()****
feholdexcept()****
feraiseexcept()****
fesetenv()****
fesetexceptflag()****
fesetround()****
fetestexcept()****
feupdateenv()****
<inttypes.h>
imaxabs()****
imaxdiv()****
strtoimax()****
strtoumax()****
wcstoimax()*
wcstoumax()*
<locale.h>
localeconv()****
setlocale()****
<pthread.h>
pthread_attr_destroy()****
pthread_attr_getdetachstate()****
pthread_attr_getguardsize()****
pthread_attr_getinheritsched()****
pthread_attr_getschedparam()****
pthread_attr_getschedpolicy()****
pthread_attr_getscope()****
pthread_attr_getstack()****
pthread_attr_getstackaddr()****
pthread_attr_getstacksize()****
pthread_attr_init()****
pthread_attr_setdetachstate()****
pthread_attr_setguardsize()****
pthread_attr_setinheritsched()****
pthread_attr_setschedparam()****
pthread_attr_setschedpolicy()****
pthread_attr_setscope()****
pthread_attr_setstack()****
pthread_attr_setstackaddr()****
pthread_attr_setstacksize()****
pthread_cancel()****
pthread_cleanup_pop()****
pthread_cleanup_push()****
pthread_cond_broadcast()****
pthread_cond_destroy()****
pthread_cond_init()****
pthread_cond_signal()****
pthread_cond_timedwait()****
pthread_cond_wait()****
pthread_condattr_destroy()****
pthread_condattr_getclock()****
pthread_condattr_init()****
pthread_condattr_setclock()****
pthread_create()****
pthread_detach()****
pthread_equal()****
pthread_exit()****
pthread_getconcurrency()****
pthread_getschedparam()****
pthread_getspecific()****
pthread_join()****
pthread_key_create()****
pthread_key_delete()****
pthread_mutex_destroy()****
pthread_mutex_getprioceiling()****
pthread_mutex_init()****
pthread_mutex_lock()****
pthread_mutex_setprioceiling()****
pthread_mutex_trylock()****
pthread_mutex_unlock()****
pthread_mutexattr_destroy()****
pthread_mutexattr_getprioceiling()****
pthread_mutexattr_getprotocol()****
pthread_mutexattr_gettype()****
pthread_mutexattr_init()****
pthread_mutexattr_setprioceiling()****
pthread_mutexattr_setprotocol()****
pthread_mutexattr_settype()****
pthread_once()****
pthread_self()****
pthread_setcancelstate()****
pthread_setcanceltype()****
pthread_setconcurrency()****
pthread_setschedparam()****
pthread_setschedprio()****
pthread_setspecific()****
pthread_testcancel()****
pthread_atfork()****
pthread_getcpuclockid()****
pthread_condattr_getpshared()**
pthread_condattr_setpshared()**
pthread_mutexattr_getpshared()**
pthread_mutexattr_setpshared()**
<sched.h>
sched_get_priority_max()****
sched_get_priority_min()****
sched_rr_get_interval()****
sched_yield()**
sched_getparam()**
sched_getscheduler()**
sched_setparam()**
sched_setscheduler()**
<semaphore.h>
sem_close()****
sem_destroy()****
sem_getvalue()****
sem_init()****
sem_open()****
sem_post()****
sem_timedwait()****
sem_trywait()****
sem_unlink()****
sem_wait()****
<setjmp.h>
longjmp()****
setjmp()****
siglongjmp()**
sigsetjmp()**
<signal.h>
kill()***
pthread_kill()****
pthread_sigmask()****
raise()****
sigaction()****
sigaddset()****
sigdelset()****
sigemptyset()****
sigfillset()****
sigismember()****
signal()****
sigpending()****
sigprocmask()****
sigqueue()****
sigsuspend()****
sigtimedwait()****
sigwait()****
sigwaitinfo()****
<stdarg.h>
va_arg()****
va_copy()****
va_end()****
va_start()****
<stdio.h>
clearerr()****
fclose()****
fdopen()****
feof()****
ferror()****
fflush()****
fgetc()****
fgets()****
fileno()****
flockfile()****
fopen()****
fprintf()****
fputc()****
fputs()****
fread()****
freopen()****
fscanf()****
ftrylockfile()****
funlockfile()****
fwrite()****
getc()****
getc_unlocked()****
getchar()****
getchar_unlocked()****
gets()****
perror()****
printf()****
putc()****
putc_unlocked()****
putchar()****
putchar_unlocked()****
puts()****
scanf()****
setbuf()****
setvbuf()****
snprintf()****
sprintf()****
sscanf()****
stderr****
stdin****
stdout****
ungetc()****
vfprintf()****
vfscanf()****
vprintf()****
vscanf()****
vsnprintf()****
vsprintf()****
vsscanf()****
fgetpos()***
fseek()***
fseeko()***
fsetpos()***
ftell()***
ftello()***
remove()***
rename()***
rewind()***
tmpfile()***
tmpnam()***
ctermid()*
pclose()*
popen()*
<stdlib.h>
abort()****
abs()****
atof()****
atoi()****
atol()****
atoll()****
bsearch()****
calloc()****
div()****
free()****
getenv()****
labs()****
ldiv()****
llabs()****
lldiv()****
malloc()****
mktime()****
qsort()****
rand()****
rand_r()****
realloc()****
setenv()****
srand()****
strtod()****
strtof()****
strtol()****
strtold()****
strtoll()****
strtoul()****
strtoull()****
unsetenv()****
_Exit()**
atexit()**
exit()**
mblen()*
mbstowcs()*
mbtowc()*
posix_memalign()*
wcstombs()*
wctomb()*
system()*
<string.h>
memchr()****
memcmp()****
memcpy()****
memmove()****
memset()****
strcat()****
strchr()****
strcmp()****
strcoll()****
strcpy()****
strcspn()****
strerror()****
strerror_r()****
strlen()****
strncat()****
strncmp()****
strncpy()****
strpbrk()****
strrchr()****
strspn()****
strstr()****
strtok()****
strtok_r()****
strxfrm()****
<sys/mman.h>
mlockall()****
mmap()****
munlock()****
munmap()****
shm_open()****
shm_unlink()****
msync()***
mprotect()**
posix_madvise()*
<sys/utsname.h>
uname()****
<time.h>
asctime()****
asctime_r()****
clock_getres()****
clock_gettime()****
clock_nanosleep()****
clock_settime()****
ctime()****
ctime_r()****
difftime()****
gmtime()****
gmtime_r()****
localtime()****
localtime_r()****
nanosleep()****
strftime()****
time()****
timer_create()****
timer_delete()****
timer_getoverrun()****
timer_gettime()****
timer_settime()****
tzname****
tzset()****
clock()**
clock_getcpuclockid()**
<unistd.h>
alarm()***
close()****
environ****
fdatasync()****
fsync()****
pause()***
read()****
sysconf()****
write()****
confstr()****
access()***
chdir()***
dup()***
dup2()***
fpathconf()***
ftruncate()***
getcwd()***
link()***
lseek()***
pathconf()***
rmdir()***
unlink()***
_exit()**
gethostname()**
getpgrp()**
getpid()**
getppid()**
pipe()**
setsid()**
sleep()**
execl()**
execle()**
execlp()**
execv()**
execve()**
execvp()**
fork()**
chown()*
fchown()*
getegid()*
geteuid()*
getgid()*
getgroups()*
getlogin()*
getlogin_r()*
getopt()*
getuid()*
isatty()*
optarg*
opterr*
optind*
optopt*
readlink()*
setegid()*
seteuid()*
setgid()*
setpgid()*
setuid()*
symlink()*
tcgetpgrp()*
tcsetpgrp()*
ttyname()*
ttyname_r()*
<complex.h>
cabs()***
cabsf()***
cabsl()***
cacos()***
cacosf()***
cacosh()***
cacoshf()***
cacoshl()***
cacosl()***
carg()***
cargf()***
cargl()***
casin()***
casinf()***
casinh()***
casinhf()***
casinhl()***
casinl()***
catan()***
catanf()***
catanh()***
catanhf()***
catanhl()***
catanl()***
ccos()***
ccosf()***
ccosh()***
ccoshf()***
ccoshl()***
ccosl()***
cexp()***
cexpf()***
cexpl()***
cimag()***
cimagf()***
cimagl()***
clog()***
clogf()***
clogl()***
conj()***
conjf()***
conjl()***
cpow()***
cpowf()***
cpowl()***
cproj()***
cprojf()***
cprojl()***
creal()***
crealf()***
creall()***
csin()***
csinf()***
csinh()***
csinhf()***
csinhl()***
csinl()***
csqrt()***
csqrtf()***
csqrtl()***
ctan()***
ctanf()***
ctanh()***
ctanhf()***
ctanhl()***
ctanl()***
<dirent.h>
closedir()***
opendir()***
readdir()***
readdir_r()***
rewinddir()***
<math.h>
acos()***
acosf()***
acosh()***
acoshf()***
acoshl()***
acosl()***
asin()***
asinf()***
asinh()***
asinhf()***
asinhl()***
asinl()***
atan()***
atan2()***
atan2f()***
atan2l()***
atanf()***
atanh()***
atanhf()***
atanhl()***
atanl()***
cbrt()***
cbrtf()***
cbrtl()***
ceil()***
ceilf()***
ceill()***
copysign()***
copysignf()***
copysignl()***
cos()***
cosf()***
cosh()***
coshf()***
coshl()***
cosl()***
erf()***
erfc()***
erfcf()***
erfcl()***
erff()***
erfl()***
exp()***
exp2()***
exp2f()***
exp2l()***
expf()***
expl()***
expm1()***
expm1f()***
expm1l()***
fabs()***
fabsf()***
fabsl()***
fdim()***
fdimf()***
fdiml()***
floor()***
floorf()***
floorl()***
fma()***
fmaf()***
fmal()***
fmax()***
fmaxf()***
fmaxl()***
fmin()***
fminf()***
fminl()***
fmod()***
fmodf()***
fmodl()***
fpclassify()***
frexp()***
frexpf()***
frexpl()***
hypot()***
hypotf()***
hypotl()***
ilogb()***
ilogbf()***
ilogbl()***
isfinite()***
isgreater()***
isgreaterequal()***
isinf()***
isless()***
islessequal()***
islessgreater()***
isnan()***
isnormal()***
isunordered()***
ldexp()***
ldexpf()***
ldexpl()***
lgamma()***
lgammaf()***
lgammal()***
llrint()***
llrintf()***
llrintl()***
llround()***
llroundf()***
llroundl()***
log()***
log10()***
log10f()***
log10l()***
log1p()***
log1pf()***
log1pl()***
log2()***
log2f()***
log2l()***
logb()***
logbf()***
logbl()***
logf()***
logl()***
lrint()***
lrintf()***
lrintl()***
lround()***
lroundf()***
lroundl()***
modf()***
modff()***
modfl()***
nan()***
nanf()***
nanl()***
nearbyint()***
nearbyintf()***
nearbyintl()***
nextafter()***
nextafterf()***
nextafterl()***
nexttoward()***
nexttowardl()***
pow()***
powf()***
powl()***
remainder()***
remainderf()***
remainderl()***
remquo()***
remquof()***
remquol()***
rint()***
rintf()***
rintl()***
round()***
roundf()***
roundl()***
scalbln()***
scalblnf()***
scalblnl()***
scalbn()***
scalbnf()***
scalbnl()***
sin()***
sinf()***
sinh()***
sinhf()***
sinhl()***
sinl()***
sqrt()***
sqrtf()***
sqrtl()***
tan()***
tanf()***
tanh()***
tanhf()***
tanhl()***
tanl()***
tgamma()***
tgammaf()***
tgammal()***
trunc()***
truncf()***
truncl()***
nexttowardf()***
signbit()***
<mqueue.h>
mq_close()***
mq_getattr()***
mq_notify()***
mq_open()***
mq_receive()***
mq_send()***
mq_setattr()***
mq_timedreceive()***
mq_timedsend()***
mq_unlink()***
<sys/stat.h>
fstat()***
mkdir()***
stat()***
chmod()*
fchmod()*
lstat()*
mkfifo()*
umask()*
<trace.h>
posix_trace_attr_destroy()***
posix_trace_attr_getclockres()***
posix_trace_attr_getcreatetime()***
posix_trace_attr_getgenversion()***
posix_trace_attr_getinherited()***
posix_trace_attr_getlogfullpolicy()***
posix_trace_attr_getlogsize()***
posix_trace_attr_getmaxdatasize()***
posix_trace_attr_getmaxsystemeventsize()***
posix_trace_attr_getmaxusereventsize()***
posix_trace_attr_getname()***
posix_trace_attr_getstreamfullpolicy()***
posix_trace_attr_getstreamsize()***
posix_trace_attr_init()***
posix_trace_attr_setinherited()***
posix_trace_attr_setlogfullpolicy()***
posix_trace_attr_setlogsize()***
posix_trace_attr_setmaxdatasize()***
posix_trace_attr_setname()***
posix_trace_attr_setstreamfullpolicy()***
posix_trace_attr_setstreamsize()***
posix_trace_clear()***
posix_trace_close()***
posix_trace_create()***
posix_trace_create_withlog()***
posix_trace_event()***
posix_trace_eventid_equal()***
posix_trace_eventid_get_name()***
posix_trace_eventid_open()***
posix_trace_eventset_add()***
posix_trace_eventset_del()***
posix_trace_eventset_empty()***
posix_trace_eventset_fill()***
posix_trace_eventset_ismember()***
posix_trace_eventtypelist_getnext_id()***
posix_trace_eventtypelist_rewind()***
posix_trace_flush()***
posix_trace_get_attr()***
posix_trace_get_filter()***
posix_trace_get_status()***
posix_trace_getnext_event()***
posix_trace_open()***
posix_trace_rewind()***
posix_trace_set_filter()***
posix_trace_shutdown()***
posix_trace_start()***
posix_trace_stop()***
posix_trace_timedgetnext_event()***
posix_trace_trid_eventid_open()***
posix_trace_trygetnext_event()***
<utime.h>
utime()***
<aio.h>
aio_cancel()**
aio_error()**
aio_fsync()**
aio_read()**
aio_return()**
aio_write()**
aio_suspend()**
lio_listio()**
<arpa/inet.h>
htonl()**
htons()**
inet_addr()**
inet_ntoa()**
inet_ntop()**
inet_pton()**
ntohl()**
ntohs()**
<assert.h>
assert()**
<net/if.h>
if_freenameindex()**
if_indextoname()**
if_nameindex()**
if_nametoindex()**
<netdb.h>
endhostent()**
endnetent()**
endprotoent()**
endservent()**
freeaddrinfo()**
gai_strerror()**
getaddrinfo()**
gethostent()**
getnameinfo()**
getnetbyaddr()**
getnetbyname()**
getnetent()**
getprotobyname()**
getprotobynumber()**
getprotoent()**
getservbyname()**
getservbyport()**
getservent()**
sethostent()**
setnetent()**
setprotoent()**
setservent()**
<spawn.h>
posix_spawn()**
posix_spawn_file_actions_addclose()**
posix_spawn_file_actions_adddup2()**
posix_spawn_file_actions_addopen()**
posix_spawn_file_actions_destroy()**
posix_spawn_file_actions_init()**
posix_spawnattr_destroy()**
posix_spawnattr_getflags()**
posix_spawnattr_getpgroup()**
posix_spawnattr_getschedparam()**
posix_spawnattr_getschedpolicy()**
posix_spawnattr_getsigdefault()**
posix_spawnattr_getsigmask()**
posix_spawnattr_init()**
posix_spawnattr_setflags()**
posix_spawnattr_setpgroup()**
posix_spawnattr_setschedparam()**
posix_spawnattr_setschedpolicy()**
posix_spawnattr_setsigdefault()**
posix_spawnattr_setsigmask()**
posix_spawnp()**
<sys/select.h>
FD_CLR()**
FD_ISSET()**
FD_SET()**
FD_ZERO()**
select()**
pselect()**
<sys/socket.h>
accept()**
bind()**
connect()**
getpeername()**
getsockname()**
getsockopt()**
listen()**
recv()**
recvfrom()**
recvmsg()**
send()**
sendmsg()**
sendto()**
setsockopt()**
shutdown()**
socket()**
socketpair()**
sockatmark()**
<sys/time.h>
times()**
utimes()**
<sys/wait.h>
wait()**
<dlfcn.h>
dlclose()*
dlerror()*
dlopen()*
dlsym()*
<fnmatch.h>
fnmatch()*
<glob.h>
glob()*
globfree()*
<grp.h>
getgrgid()*
getgrgid_r()*
getgrnam()*
getgrnam_r()*
<pwd.h>
getpwnam()*
getpwnam_r()*
getpwuid()*
getpwuid_r()*
<regex.h>
regcomp()*
regerror()*
regexec()*
regfree()*
<syslog.h>
closelog()*
openlog()*
setlogmask()*
syslog()*
<termios.h>
cfgetispeed()*
cfgetospeed()*
cfsetispeed()*
cfsetospeed()*
tcdrain()*
tcflow()*
tcflush()*
tcgetattr()*
tcsendbreak()*
tcsetattr()*
<wchar.h>
btowc()*
fgetwc()*
fgetws()*
fputwc()*
fputws()*
fwide()*
fwprintf()*
fwscanf()*
getwc()*
getwchar()*
mbrlen()*
mbrtowc()*
mbsinit()*
mbsrtowcs()*
putwc()*
putwchar()*
swprintf()*
swscanf()*
ungetwc()*
vfwprintf()*
vfwscanf()*
vswprintf()*
vswscanf()*
vwprintf()*
vwscanf()*
wcrtomb()*
wcscat()*
wcschr()*
wcscmp()*
wcscoll()*
wcscpy()*
wcscspn()*
wcsftime()*
wcslen()*
wcsncat()*
wcsncmp()*
wcsncpy()*
wcspbrk()*
wcsrchr()*
wcsrtombs()*
wcsspn()*
wcsstr()*
wcstod()*
wcstof()*
wcstok()*
wcstol()*
wcstold()*
wcstoll()*
wcstoul()*
wcstoull()*
wcsxfrm()*
wctob()*
wmemchr()*
wmemcmp()*
wmemcpy()*
wmemmove()*
wmemset()*
wprintf()*
wscanf()*
<wctype.h>
iswalnum()*
iswalpha()*
iswblank()*
iswcntrl()*
iswctype()*
iswdigit()*
iswgraph()*
iswlower()*
iswprint()*
iswpunct()*
iswspace()*
iswupper()*
iswxdigit()*
towctrans()*
towlower()*
towupper()*
wctrans()*
wctype()*
<wordexp.h>
wordexp()*
wordfree()*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值