2009-08-29 3 views
1

Der Code ich bin auf der Suche ist hier:Ignorieren SIGPIPE für einen einzelnen popen'd FILE *

http://github.com/andymatuschak/Sparkle/blob/8ea15468b4a8c0487ca7a72f3c9e6ffb708c6af8/SUPipedUnarchiver.m

Sparkle ist wie ein Plugin. Es kann in einem Multithread-Programm instanziiert werden. Daher möchte ich kein Signal (SIGPIPE, SIG_IGN) aufrufen (dh ignorieren alle SIGPIPE) als wer weiß, was andere Threads tun/erwarten.

Wie kann ich das SIGPIPE-Signal für diesen einen FILE-Zeiger deaktivieren, der über popen geöffnet wurde?

Antwort

0

Wenn die Spezifikationen, die Sie verwenden, um Ihr Plugin zu schreiben, nicht angeben, was Sie tun müssen, sehe ich nichts, was Sie mit pipe() tun können. Ein möglicher Weg, um aus diesem Problem herauszukommen, wäre, ein poppen() Äquivalent mit socketpair() und fdopen() zu schreiben.

+0

Ich verstehe den ersten Satz nicht, aber wird Socketpair nachschlagen. Vielen Dank. – mxcl

+0

Sie können also kein Sigpipe für ein Sockelpaar bekommen? Ich kann diese Information nicht finden. – mxcl

+0

Mit einem Socket-Paar können Sie den Aufruf send() verwenden, und send() kann MSD_NOSIGNAL (auf BSDs atleast) MSG_NOSIGNAL als Flag-Parameter verwenden, wodurch SIGPIPE nicht geliefert wird. – nos

Verwandte Themen