UNIX nonblocking I / O: O_NONBLOCK เทียบกับ FIONBIO
ในทุกตัวอย่างและการสนทนาที่ฉันใช้ในบริบทของการเขียนโปรแกรมซ็อกเก็ต BSD ดูเหมือนว่าวิธีที่แนะนำในการตั้งค่าตัวอธิบายไฟล์เป็นโหมด I / O ที่ไม่ปิดกั้นคือการใช้O_NONBLOCKแฟล็กเพื่อfcntl()เช่น int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); ฉันทำการเขียนโปรแกรมเครือข่ายใน UNIX มานานกว่าสิบปีแล้วและใช้การFIONBIO ioctl()โทรเพื่อทำสิ่งนี้มาโดยตลอด: int opt = 1; ioctl(fd, FIONBIO, &opt); ไม่เคยคิดมากว่าทำไม เพิ่งเรียนรู้วิธีนี้ ใครมีความเห็นเกี่ยวกับข้อดีของข้อใดข้อหนึ่งหรือไม่? ฉันคิดว่าโลคัสการพกพานั้นแตกต่างกันบ้าง แต่ไม่รู้ว่าioctl_list(2)มันไม่ได้พูดถึงแง่มุมของแต่ละioctlวิธี