是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
还是在每个函数中声明一次?
答案 0 :(得分:1)
您不必在每个函数中都调用sigaction()
。它为给定信号设置一个(全局)信号处理程序,直到您更改它为止,该信号处理程序一直保持该信号处理程序–通过对同一信号的另一次sigaction()
调用。您可以在sigaction()
中呼叫main()
,但这也不是必须的。您可以在其他选定功能中调用它。
请注意,您需要为要处理的每个不同信号调用一次sigaction()
(或忽略)。调用循环一个信号列表,为每个信号设置适当的处理程序的函数通常是有益的。谢天谢地,您不必在调用的每个函数中都这样做!
通常,避免在同一程序中混用对signal()
和sigaction()
的调用。如果您在任何地方使用sigaction()
,请在任何地方使用。但是,如果您坚持要变态,那么可以在我只提到sigaction()
的第一段中使用“ signal()
或sigaction()
”。
请注意,您可以使用sigaction()
查找如何处理信号,而无需设置新的信号处理。使用signal()
,您可以(或多或少)了解信号的处理方式,但是还必须设置一个动作。另一个比sigaction()
更喜欢signal()
的原因。
请注意,我假设问题中的“声明”意味着某种形式的“呼叫”。您不要在任何函数中声明sigaction()
;您包括<signal.h>
进行声明。