1. 首页
  2. 考试认证
  3. 其它
  4. 可再入函数

可再入函数

上传者: 2024-07-22 16:53:05上传 PDF文件 17.98MB 热度 7次

可再入函数进程捕捉到信号并继续执行时,它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列(这类似于硬件中断发生时所做的)。但在信号处理程序中,不能判断捕捉到信号时进程执行到何处。如果进程正在执行malloc,在其堆中分配另外的存储空间,而此时由于捕捉到信号插入执行该信号处理程序,其中又调用malloc,这时会发生什么?又例如若进程正在执行getpwnam(见6.2节)这种将其结果存放在静态存储单元中的函数,而插入执行的信号处理程序中又调用这样的函数,这时又会发生什么呢?在malloc例中,可能会对进程造成破坏,因为malloc通常为它所分配的存储区保持一个连接表,而插入执行信号处理程序时,进程可能正在更改此连接表。在getpwnam的例子中,正常返回给调用者的信息可能由返回至信号处理程序的信息覆盖。POSIX.1说明了保证可再入的函数。表10-3列出了这些可再入函数。图中四个带*号的函数并没有按POSIX.1说明为是可再入的,但SVR4 SVID 〔AT&T 1989〕则将它们列为是可再入的。

想知道更多关于POSIX标准文档的信息吗?你可以通过以下链接深入了解:POSIX标准文档ISO POSIX Linux Unix标准C函数速查手册POSIX最新标准文档POSIX1003标准文档。这些文档还可以在线浏览:POSIX标准文档在线浏览。有了这些资源,你还会担心了解不到POSIX标准的最新内容吗?

表10-3信号处理程序中可以调用的可再入函数:

  • exit

  • fork

  • pipe

  • stabort *

  • fstat

  • read

  • sysconf

  • access

  • getegid

  • rename

  • tcdrain

  • alarm

  • geteuid

  • rmdir

  • tcflow

  • cfggetispeed

  • getgid

  • setgid

  • tcflush

  • cfggetospeed

  • getgroups

  • setpgid

  • tcgetattr

  • cfsetispeed

  • getpid

  • setuid

  • tcgetpgrp

  • cfsetospeed

  • getpgrp

  • setsid

  • tcsetattr

  • cfsetispeed

  • getuid

  • sigaction

  • tcsetpgrp

  • cfsetospeed

  • getppid

  • sigaddset

  • tcsetpgrp

  • chmod

  • kill

  • sigdelset

  • time

  • close

  • link

  • sigemptyset

  • times

  • creat

  • longjmp *

  • sigfillset

  • umask

  • dup

  • lseek

  • sigismember

  • uname

  • dup2

  • mkdir

  • signal *

  • unlink

  • execl

  • mkfifo

  • sigpending

  • utime

  • execve

  • open

  • sigprocmask

  • wait

  • exit *

  • pathconf

  • sigsuspend

  • waitpid

  • fcntl

  • pause

  • sleep

  • write

从这些函数中可以看出,POSIX标准中对可再入函数有着严格的定义和分类。对于那些从事相关开发工作的人士来说,掌握这些信息无疑是至关重要的。

下载地址
用户评论