ถ้าเราใช้echo 1234 >> some-file
แล้วเอกสารระบุว่าเอาท์พุทจะถูกผนวกเข้า
ฉันเดาว่าถ้าไม่มีไฟล์บางไฟล์ O_CREAT จะสร้างไฟล์ใหม่ ถ้า>
ใช้แล้ว O_TRUNC จะตัดทอนไฟล์ที่มีอยู่
ในกรณีของ>>
: ไฟล์จะถูกเปิดเป็น O_WRONLY (หรือ O_RDWR) และพยายามที่จะจบและเขียนการดำเนินการจำลอง O_APPEND? หรือไฟล์จะถูกเปิดเป็น O_APPEND ปล่อยให้มันอยู่ในเคอร์เนลเพื่อให้แน่ใจว่าการต่อท้ายเกิดขึ้น?
ฉันกำลังถามเรื่องนี้เพราะกระบวนการ conserver เขียนทับเครื่องหมายบางตัวที่ใส่โดย echo เมื่อไฟล์เอาต์พุตมาจากจุดเมานต์ของ NFS & เอกสารของ NFS บอกว่า O_APPEND ไม่รองรับเซิร์ฟเวอร์ดังนั้นเคอร์เนลไคลเอ็นต์จะต้องจัดการมัน ฉันเดาว่ากระบวนการ conserver ใช้ O_APPEND แต่ไม่แน่ใจในการทุบตี>>
กับ linux ดังนั้นจึงถามคำถามที่นี่
O_APPEND
ได้รับการสนับสนุน ปัญหาคือมันถูกลอกเลียนแบบ บนระบบไฟล์โลคัลกระบวนการหลายกระบวนการที่เขียนไปยังไฟล์เดียวกันที่เปิดด้วยO_APPEND
จะไม่เขียนทับข้อมูลของกันและกัน บน NFSO_APPEND
ถูกเลียนแบบโดยพยายามหาจุดจบก่อนการเขียนซึ่งทำให้ความเป็นไปได้ของสภาพการแข่งขัน ไม่มีวิธีแก้ไขปัญหานี้ใน NFS ตัวเขียนแบบขนานแต่ละตัวจำเป็นต้องเขียนไฟล์ของตัวเอง วิธีเดียวในการแก้ไขปัญหานี้คือการตั้งค่ากระบวนการเซิร์ฟเวอร์บนเซิร์ฟเวอร์ NFS มีการบันทึก loggers|nc server port
และให้เซิร์ฟเวอร์ผนวกข้อมูลที่เข้ามาลงในบันทึก