فهم قذيفة إعادة توجيه على غير متوفرة الملفات
-
07-07-2019 - |
سؤال
ls > ls.out
وسوف يشمل هذا ليرة سورية.في القائمة أيضا.فهمي:> (شل إخراج توجيه المشغل هو إنشاء ملف الأولى (أن تأخذ المعياري) إذا لم تكن القائمة ثم هل الأمر قادم للعب و هو بما في ذلك بإنشائها ليرة سورية.خارج الملف في الإخراج.هل هذا صحيح ؟ إن لم يكن, يمكنك من فضلك توضيح طريقة عمل هذا الأمر.
وبالمثل
wc temp > temp
طباعة 0 0 0 temp داخل فقط إنشاء ملف مؤقت.
هذا السلوك من قذيفة مثيرة للاهتمام.أتساءل كيف أنها تعمل في الواقع.راجع للشغل, كلاهما تمارين في Unix بيئة البرمجة الكتاب.كما ذكرت الجواب أعلاه ، أريد بعض الخبراء لتصحيح فهمي.
المحلول
عند إعادة توجيه الإخراج القياسي مع >
، وقذيفة سوف إنشاء ملف (كما ملف فارغ) إذا كان غير موجود بالفعل. وعلاوة على ذلك، يتم فتح هذا الملف قبل الشوك قذيفة وإإكسكس يتم تنفيذ الأمر. عند القيام wc temp > temp
، وقذيفة يفتح ملف للكتابة ثم الشوك وإإكسكس wc
، ويمر في الملف المفتوح يعالج في العملية.
نصائح أخرى
التبسيط:
ls
تبحث في inode (الدليل) الدخول التي إعادة توجيه إنشاؤها.
wc
يمكن أن نرى inode أن إعادة توجيه إنشاؤها ، ولكن عندما يبحث في محتويات فهي فارغة لأنه (wc
) لم يكتب لهم حتى الآن.
تحرير:
أولا ، في كلتا الحالتين ، فإن إعادة توجيه (>ls.out
أو >temp
) بإنشاء ملف فارغ.إدخال (inode) في الدليل للإشارة إلى موقع الملف و تحتوي على بعض المعلومات حول هذا الموضوع.راجع مقالة ويكيبيديا عن inodes.
المقبل, في حالة ls
, كل الإدخالات في الدليل ، بما في ذلك واحدة ls.out
الذي تم إنشاؤه للتو, هل قراءة وكتابة stdout
(وهو في هذه الحالة يصبح محتويات ls.out
).
أو في حالة wc
, إنه عد السطر كلمة بايت التهم مؤخرا إنشاء ملف يسمى temp
والتي هي فارغة لذلك يكتب صفر التهم في الملف بعد وتعول (لا شيء).
محتويات الملفات (temp
أو ls.out
) ليست مكتوبة حتى بعد كل قراءة ذلك أنها لا يمكن أن تدرج.
عن أفضل طريقة للمقارنة ما ls
و wc
يفعلون ، حاول هذا الأمر (عند ls.out
غير موجودة):
ls -l > ls.out
يجب أن ترى أن حجم الملف ls.out
هو صفر حسب القائمة الواردة في الداخل (cat ls.out
), ولكن إذا كنت تفعل ls -l ls.out
سترى أنه ليس من الصفر.وهذا يتوافق مع ما تراه يحدث مع wc
.
والنظر wc -l temp > temp
إذا temp
موجودة بالفعل، وكان يقول 20 خطوط تزال نتيجة cat temp
بعد تنفيذ الأمر المذكور أعلاه، وسوف تكون 0 درجة الحرارة.
وأعتقد أن هذا هو لأن قذيفة يخلق temp
فارغة جديدة حتى لو كانت موجودة temp
بالتالي الكتابة في درجة الحرارة الحالية، وبالتالي عندما يحاول wc
لحساب الأسطوانات الأسطر في temp
يحصل الصفر.
في تأثير تنفيذ > temp
بواسطة قذيفة أولا ثم يتم تنفيذ wc -l temp
.