现在的清单是:
_Exit() getppid() sendmsg() tcgetpgrp()
_exit() getsockname() sendto() tcsendbreak()
abort() getsockopt() setgid() tcsetattr()
accept() getuid() setpgid() tcsetpgrp()
access() htonl() setsid() time()
aio_error() htons() setsockopt() timer_getoverrun()
aio_return() kill() setuid() timer_gettime()
aio_suspend() link() shutdown() timer_settime()
alarm() linkat() sigaction() times()
bind() listen() sigaddset() umask()
cfgetispeed() longjmp() sigdelset() uname()
cfgetospeed() lseek() sigemptyset() unlink()
cfsetispeed() lstat() sigfillset() unlinkat()
cfsetospeed() memccpy() sigismember() utime()
chdir() memchr() siglongjmp() utimensat()
chmod() memcmp() signal() utimes()
chown() memcpy() sigpause() wait()
clock_gettime() memmove() sigpending() waitpid()
close() memset() sigprocmask() wcpcpy()
connect() mkdir() sigqueue() wcpncpy()
creat() mkdirat() sigset() wcscat()
dup() mkfifo() sigsuspend() wcschr()
dup2() mkfifoat() sleep() wcscmp()
execl() mknod() sockatmark() wcscpy()
execle() mknodat() socket() wcscspn()
execv() ntohl() socketpair() wcslen()
execve() ntohs() stat() wcsncat()
faccessat() open() stpcpy() wcsncmp()
fchdir() openat() stpncpy() wcsncpy()
fchmod() pause() strcat() wcsnlen()
fchmodat() pipe() strchr() wcspbrk()
fchown() poll() strcmp() wcsrchr()
fchownat() posix_trace_event() strcpy() wcsspn()
fcntl() pselect() strcspn() wcsstr()
fdatasync() pthread_kill() strlen() wcstok()
fexecve() pthread_self() strncat() wmemchr()
ffs() pthread_sigmask() strncmp() wmemcmp()
fork() raise() strncpy() wmemcpy()
fstat() read() strnlen() wmemmove()
fstatat() readlink() strpbrk() wmemset()
fsync() readlinkat() strrchr() write()
ftruncate() recv() strspn()
futimens() recvfrom() strstr()
getegid() recvmsg() strtok_r()
geteuid() rename() symlink()
getgid() renameat() symlinkat()
getgroups() rmdir() tcdrain()
getpeername() select() tcflow()
getpgrp() sem_post() tcflush()
getpid() send() tcgetattr()
因此,您要么使用write()所提供的格式设置支持。printf()等,否则您将设置一个标志,在代码中的适当位置(定期)进行测试。此技术在回答通过格里杰什·肖汉.

标准C功能和信号安全

克雷问一个有趣的问题,我只有一个部分的答案:
为什么大多数字符串函数都是从的字符类函数。还有更多的C标准库函数不在上面的列表中吗?实现需要有目的邪恶才能实现。strlen()从信号处理程序调用不安全。
中的许多函数,很难理解为什么它们没有被宣布为异步信号安全,我同意strlen()是一个很好的例子,以及strchr(),strstr()等另一方面,其他功能,如strtok(),strcoll()和strxfrm()是相当复杂的,不太可能是异步信号安全的。因为strtok()保留调用之间的状态,信号处理程序无法很容易地判断正在使用的代码的某些部分。strtok()都会搞砸的。这个strcoll()和strxfrm()函数处理对地区敏感的数据,加载区域设置涉及各种状态设置.
的函数(宏)都是区域敏感的,因此可能遇到与strcoll()和strxfrm().
我很难理解为什么是不安全的异步信号,除非是因为它们可能会受到SIGFPE(浮点异常)的影响,尽管这几天我只看到一次。整型除以零。类似的不确定性产生于,和.
中的一些功能可以被豁免-abs()例如。另一些具体问题是:malloc()家庭就是最好的例子。
可以对POSIX环境中使用的标准C(2011)中的其他标头进行类似的评估。(标准C是如此严格,在纯标准C环境中分析它们是没有兴趣的。)那些标记为“区域相关的”是不安全的,因为操作区域设置可能需要内存分配,等等。