图片来源:https://www.pixiv.net/artworks/65838500 term 表示信号终止进程,core 表示进程产生核心转储文件并退出,ignore 表示忽略该信号,stop 表示信号停止了进程,cont 表示信号恢复了一个已停止的进程 信号 信号值(x86) 默认行为 描述 触发场景 SIGABRT / SIGIOT 6 core 进程终止信号 进程调用 abort()函数时,系统向进程发送该信号 SIGALRM 14 term 实时定时器过期 调用 alarm()或 setitimer()而设置的实时定时器到期,内核将产生该信号 SIGBUS 7(不可移植) core 内存访问错误 使用由 mmap()所创建的内存映射时,如果试图访问的地址超出了底层内存映射文件的结尾,那么将产生该错误 SIGCHLD 17(不可移植) ignore 子进程终止、暂停、继续 子进程终止、子进程因收到信号而停止或恢复时向父进程发送该信号 SIGCONT 18(不可移植) cont 如果被暂停,重新继续执行 将该信号发送给已停止的进程,进程将会恢复运行。当接收信号的进程当前不处于停止状态时,默认情况下将忽略该信号 SIGEMT 未定义 term 硬件错误 UNIX 系统通常用该信号来标识一个依赖于实现的硬件错误。Linux 系统仅在 Sun SPARC 实现中使用了该信号 SIGFPE 8 core 算术异常 在 x86-32 架构中,整数除以 0 总是产生 SIGFPE 信号,但是对浮点数除以 0 的处理则取决于是否启用了 FE_DIVBYZERO 异常。如果启用了该异常(使用feenableexcept()),那么浮点数除以 0 也将产生 SIGFPE 信号,否则,将为操作数产生符合 IEEE 标准的结果(无穷大的浮点表示形式)。 SIGHUP 1 term 挂起 检测到控制终端挂起或者控制进程死亡时,进程会收到 SIGHUP。许多守护进程会在收到 SIGHUP 信号时重新进行初始化并重读配置文件。nohup 命令用于无视该信号 SIGILL 4 core 非法的指令 如果进程试图执行非法(即格式不正确)的机器语言指令,系统将向进程发送该信号 SIGINT 2 term 终端中断信号 当用户键入终端中断字符(通常为 Ctrl-C)时,终端驱动程序将发送该信号给前台进程组 SIGKILL 9 term 杀死 此信号为“必杀(sure kill)”信号,处理器程序无法将其阻塞、忽略或者捕获,故而“一击必杀”,总能终止进程 SIGIO / SIGPOLL 29(不可移植) term I/O 时可能产生 利用 fcntl()系统调用,即可于特定类型(诸如终端和套接字)的打开文件描述符发生 I/O 事件时产生该信号 SIGPIPE 13 term 管道断开 当某一进程试图向管道、FIFO 或套接字写入信息时,如果这些设备并无相应的阅读进程,那么系统将产生该信号 SIGPROF 27(不可移植) term […]
Monthly Archives: April 2023
图片来源:《灵笼》特别篇截图 方案一:继承 std::streambuf 详细解释查看 《C++标准库:第2版》 15.13章节 输出流(没有缓冲区) 在不考虑缓冲区的情况下,继承 std::streambuf 并重写两个函数 : 输出流(有缓冲区) 考虑缓冲区的话,需要: 输入流 输入流需要考虑支持回退(basic_istream& unget()),重写 virtual int_type underflow () 函数用以从文件描述符中读取数据到缓冲区,缓冲区前 4 字节保存可回退数据 方案二:使用 __gnu_cxx::stdio_filebuf stdio_filebuf 支持使用文件描述符或者C文件指针(std::__c_file * 即 FILE *)构造,部分构造函数: 使用示例: 注意:对于文件描述符,stdio_filebuf 在析构时会主动调用 close ;但对于 FILE * 则不会主动关闭,需要手动调用 fclose 方案三:使用 boost::iostreams::file_descriptor_source 和 boost::iostreams::file_descriptor_sink boost 的 file_descriptor_source 和 file_descriptor_sink 可以使用文件描述符来构造,继而构造出 boost::iostreams::stream ,部分构造函数: 其中 file_descriptor_source 只能从文件描述符读取数据,file_descriptor_sink 则只能写入数据,file_descriptor_flags 用以控制析构时是否自动关闭文件描述符 参考: 《C++标准库:第2版》 __gnu_cxx::stdio_filebuf< _CharT, _Traits >(3) —— man page File Descriptors —— boost