น่าสนใจพอดูเหมือนว่าคำตอบอาจเป็น "ขึ้นอยู่กับ"
เพื่อความชัดเจนmv
ระบุให้
mv
ยูทิลิตี้จะดำเนินการเทียบเท่ากับrename()
ฟังก์ชั่น
ข้อกำหนดฟังก์ชั่นการเปลี่ยนชื่อฯ :
นี้rename()
ฟังก์ชั่นเทียบเท่าสำหรับไฟล์ปกติที่กำหนดโดยมาตรฐาน ISO C การรวมไว้ที่นี่จะขยายคำจำกัดความนั้นเพื่อรวมการกระทำในไดเรกทอรีและระบุพฤติกรรมเมื่อพารามิเตอร์ใหม่ตั้งชื่อไฟล์ที่มีอยู่แล้ว ข้อมูลจำเพาะนั้นต้องการการกระทำของฟังก์ชันนั้นเป็นอะตอม
แต่ล่าสุดข้อกำหนด ISO ISOสำหรับrename()
รัฐ:
7.21.4.2 rename
ฟังก์ชั่น
สรุป
#include <stdio.h>
int rename(const char *old, const char *new);
ลักษณะ
rename
ฟังก์ชั่นที่ทำให้เกิดไฟล์ที่มีชื่อสตริงชี้ไปตามเป็นที่รู้จักตั้งแต่บัดนี้เป็นต้นไปโดยใช้ชื่อที่กำหนดโดยสตริงชี้ไปตามold
new
ไฟล์ที่ชื่อold
ไม่สามารถเข้าถึงได้โดยชื่อนั้น หากไฟล์ที่ชื่อโดยสตริงที่ชี้ไปnew
มีอยู่ก่อนการเรียกไปยังrename
ฟังก์ชันการทำงานจะถูกกำหนดไว้
ผลตอบแทน
rename
กลับมาทำงานเป็นศูนย์ถ้าการดำเนินการประสบความสำเร็จไม่ใช่ศูนย์ถ้ามันล้มเหลวซึ่งในกรณีนี้หากไฟล์ที่มีอยู่ก่อนหน้านี้มันเป็นที่รู้จักกันโดยยังคงชื่อเดิม
น่าแปลกที่ทราบว่าไม่มีข้อกำหนดที่ชัดเจนสำหรับอะตอมมิก อาจจำเป็นต้องใช้ที่อื่นใน C Standard ที่เผยแพร่สู่สาธารณะล่าสุด แต่ฉันไม่สามารถค้นหาได้ หากใครสามารถค้นหาข้อกำหนดดังกล่าวได้การแก้ไขและความคิดเห็นนั้นเป็นมากกว่าการต้อนรับ
ดูเพิ่มเติมเปลี่ยนชื่อ () เป็นอะตอมหรือไม่
ตามหน้าลินุกซ์ :
หากnewpath
มีอยู่แล้วมันจะถูกแทนที่ด้วยอะตอมดังนั้นจึงไม่มีจุดที่กระบวนการอื่นที่พยายามเข้าถึง
newpath
จะพบว่าหายไป อย่างไรก็ตามอาจจะมีหน้าต่างที่ทั้งคู่oldpath
และnewpath
อ้างถึงไฟล์ที่ถูกเปลี่ยนชื่อ
หน้า man Linux อ้างว่าการแทนที่ไฟล์จะเป็นแบบ atomic
การทดสอบและตรวจสอบว่าอะตอมมิกซิตี้อาจเป็นเรื่องยากมากหากเป็นไปได้ว่าคุณต้องไปไกลแค่ไหน คุณไม่ชัดเจนว่าคุณหมายถึงอะไรในการใช้งาน "ฉันจะตรวจสอบได้อย่างไรว่า mv เป็นอะตอม" คุณต้องการข้อกำหนด / ข้อมูลจำเพาะ / เอกสารที่เป็นอะตอมหรือคุณต้องการทดสอบจริงหรือไม่?
หมายเหตุด้วยดังกล่าวข้างต้นถือว่าสองชื่อไฟล์ตัวถูกดำเนินการอยู่ในระบบไฟล์เดียวกัน ฉันไม่พบข้อ จำกัด มาตรฐานในmv
โปรแกรมอรรถประโยชน์นี้เพื่อบังคับใช้
strace
ไหม