ถ้าเราใช้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และให้เซิร์ฟเวอร์ผนวกข้อมูลที่เข้ามาลงในบันทึก