ما هي أنظمة الملفات التي تدعم الربط عبر لصق Linux (2)؟
-
30-09-2019 - |
سؤال
ال صفحة الرجل ل splice
استدعاء النظام يقول ان splice
قد تفشل وتعيين errno
إلى EINVAL
إذا:
نظام الملفات الهدف لا يدعم الربط ؛ لا يشير أي من الواصفات إلى أنبوب ؛ أو إزاحة ممنوحة للجهاز غير القابل للبحث
ما هي أنظمة الملفات التي تدعم الربط؟
المحلول
كانت إجابتي الأصلية غير صحيحة جزئيًا ، فهذه إعادة كتابة رئيسية.
Linux 2.6.30.10 وتحت
في Linux 2.6.30.10 وما فوق ، splice
عائدات EINVAL
عندما لا يدعم نظام الملفات المصدر أو الهدف الربط. ها هي أنظمة الملفات التي تدعم الربط:
- في وضع القراءة: ADFs ، AFFS ، AFS ، BFS ، BTRFS ، CODA ، ECRYPTFS ، EXOFS ، EXT2 ، EXT3 ، EXT4 ، FAS ، sysv ، ubifs ، udf ، ufs.
- في وضع الكتابة: exofs ، ext2 ، ext3 ، ext4 ، jfs ، ocfs2 ، reiserfs ، ubifs.
التفاصيل تتبع. دعم الربط في المحدد في do_splice_to()
وظيفة في حالة "الملف إلى الأنابيب" وفي do_splice_from()
وظيفة في حالة "الأنابيب إلى ملف". يتم ذلك عن طريق التحقق مما إذا كان المصلح struct file_operations
يحتوي على .splice_read
أو .splice_write
, ، على التوالى. من أجل إنتاج القوائم المذكورة أعلاه لنظم الملفات ، لقد قمت بتشويه fs/*/file.c
إلى عن على .splice_read
و .splice_write
.
Linux 2.6.31 وما فوق
بدءا من Linux 2.6.31 ، جميع أنظمة الملفات تدعم الربط في أوضاع القراءة والكتابة.
التفاصيل تتبع. عندما لا يكون لدى نظام الملفات .splice_read
أو .splice_write
فيها struct file_operations
, ، يتم استخدام وظيفة الاحتياط: default_file_splice_read
و default_file_splice_write
, ، على التوالى. نرى do_splice_to()
و do_splice_from()
للتطبيقات. ملحوظة: EINVAL
قد لا يزال يتم إرجاعها لأسباب أخرى مدرجة في الوثائق.
نصائح أخرى
اتفاق ل هذه, ، ext3 يفعل. يبدو أنك قد تكون محظوظًا مع أي نظام ملفات فتيل.