函数中的Sigaction声明

时间:2019-04-11 09:07:52

标签: c unix sigaction

是Unix中的sigaction在existing_pdf = PdfFileReader(file(path, "rb")) output = PdfFileWriter() page = existing_pdf.getPage(0) page.cropBox.lowerLeft = (287.996, 163) page.cropBox.upperRight = (0, 0) pamphlet_pdf = PdfFileReader(file("pamphlet.pdf", "rb")) page_pamplet = pamphlet_pdf.getPage(0) page_pamplet.mergePage(page) output.addPage(page_pamplet) outputStream = file("output.pdf", "wb") output.write(outputStream) outputStream.close() 函数中仅声明一次,还是应该在我的main调用的每个函数中声明它,所以如果执行不在我的{{1}内部时发出信号},信号处理程序将调用?因此,我必须在main的开头仅声明一次main还是在每个函数中声明一次?

1 个答案:

答案 0 :(得分:1)

您不必在每个函数中都调用sigaction()。它为给定信号设置一个(全局)信号处理程序,直到您更改它为止,该信号处理程序一直保持该信号处理程序–通过对同一信号的另一次sigaction()调用。您可以在sigaction()中呼叫main(),但这也不是必须的。您可以在其他选定功能中调用它。

请注意,您需要为要处理的每个不同信号调用一次sigaction()(或忽略)。调用循环一个信号列表,为每个信号设置适当的处理程序的函数通常是有益的。谢天谢地,您不必在调用的每个函数中都这样做!

通常,避免在同一程序中混用对signal()sigaction()的调用。如果您在任何地方使用sigaction(),请在任何地方使用。但是,如果您坚持要变态,那么可以在我只提到sigaction()的第一段中使用“ signal()sigaction()”。

请注意,您可以使用sigaction()查找如何处理信号,而无需设置新的信号处理。使用signal(),您可以(或多或少)了解信号的处理方式,但是还必须设置一个动作。另一个比sigaction()更喜欢signal()的原因。

请注意,我假设问题中的“声明”意味着某种形式的“呼叫”。您不要在任何函数中声明sigaction();您包括<signal.h>进行声明。