1. 首页
  2. 操作系统
  3. Unix
  4. 可再入函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

可再入函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

上传者: 2024-07-15 20:13:15上传 PDF文件 18.16MB 热度 13次

当进程捕捉到信号并继续执行时,它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列。这类似于硬件中断发生时所做的。然而,在信号处理程序中,不能判断捕捉到信号时进程执行到何处。例如,如果进程正在执行malloc函数,并在其堆中分配存储空间,而此时由于捕捉到信号插入执行信号处理程序,该程序中又调用malloc,这时会发生什么?再如,若进程正在执行getpwnam这种将结果存放在静态存储单元中的函数,而插入执行的信号处理程序中又调用这样的函数,又会发生什么?

在malloc的例子中,这可能会对进程造成破坏,因为malloc通常为其所分配的存储区保持一个连接表。而插入执行信号处理程序时,进程可能正在更改此连接表。在getpwnam的例子中,正常返回给调用者的信息可能由返回至信号处理程序的信息覆盖。

POSIX.1说明了保证可再入的函数。表10-3列出了这些可再入函数。图中四个带*号的函数并没有按POSIX.1说明为是可再入的,但SVR4 SVID将它们列为是可再入的。

表10-3信号处理程序中可以调用的可再入函数包括exit, fork, pipe, abort, fstat, read, sysconf, access, getegid, rename, alarm, geteuid, rmdir, tcflush, cfgetispeed, getgid, setgid, tcgetattr, cfsetispeed, getgroups, setpgid, tcgetpgrp, cfsetospeed, getpgrp, setsid, tcsetattr, getpid, setuid, tcsetpgrp, getppid, sigaction, tcsendbreak, chmod, getuid, sigaddset, tcsettime, close, link, sigdelset, times, creat, longjmp, sigfillset, umask, dup, lseek, sigismember, uname, dup2, mkdir, sigpending, utime, execl, mkfifo, sigprocmsk, wait, execve, open, sigsuspend, waitpid, fcntl, pause, sleep, write等。

对malloc函数的深入理解可以参考以下资源:

对于了解更多关于信号处理函数的信息,可以参考:

另外,关于再入函数C51单片机程序的详细解释,可以查看以下资源:

下载地址
用户评论