ฉันกำลังรวมโค้ด C++ ที่มีอยู่จากโปรเจ็กต์ BSD ใน Wrapper ที่เรากำหนดเอง และฉันต้องการรวมเข้ากับโค้ดของเราโดยมีการเปลี่ยนแปลงน้อยที่สุด รหัสนี้ใช้ fprintf
เพื่อพิมพ์ไปที่ stderr เพื่อบันทึก / รายงานข้อผิดพลาด
ฉันต้องการเปลี่ยนเส้นทางนี้ไปยังสถานที่อื่นภายในกระบวนการเดียวกัน บน Unix ฉันทำสิ่งนี้ด้วย socketpair
และ thread
: ปลายด้านหนึ่งของซ็อกเก็ตคือที่ที่ฉันส่ง stderr (ผ่านการเรียกไปที่ dup2
) และปลายอีกด้านหนึ่งได้รับการตรวจสอบ ในเธรด ซึ่งฉันสามารถประมวลผลเอาต์พุตได้
สิ่งนี้ใช้ไม่ได้กับ Windows เนื่องจากซ็อกเก็ตไม่เหมือนกับตัวจัดการไฟล์
เอกสารทั้งหมดที่ฉันพบบนเว็บแสดงวิธีเปลี่ยนเส้นทางเอาต์พุตจากกระบวนการย่อย ซึ่งไม่ใช่สิ่งที่ฉันต้องการ ฉันจะเปลี่ยนเส้นทาง stderr ภายในกระบวนการเดียวกันเพื่อรับการเรียกกลับบางประเภทเมื่อมีการเขียนเอาต์พุตได้อย่างไร (และก่อนที่คุณจะพูดอย่างนั้น ฉันได้ลอง SetStdHandle
แล้ว แต่ไม่พบวิธีใดที่จะทำให้งานนี้สำเร็จได้)...