فهم قذيفة إعادة توجيه على غير متوفرة الملفات

StackOverflow https://stackoverflow.com/questions/1430828

  •  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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top