[Powered by Google Translate] TOMMY: في هذا الفيديو، سوف نتعلم عن
إعادة توجيه والأنابيب.
حتى الآن، كنا باستخدام وظائف مثل printf ل
بيانات الإخراج إلى محطة وظائف مثل GetString
للسماح للمستخدم لتوفير مدخلات لدينا
البرنامج باستخدام لوحة المفاتيح.
دعونا نلقي نظرة على وجه السرعة برنامج يحصل على خط
مدخلات من المستخدم ومن ثم إخراجها.
>> على السطر 7، ونحن مطالبة المستخدم لسلسلة، و
ثم على السطر 8، ونحن طباعته العودة.
دعونا ترجمة وتشغيل البرنامج.
كبيرة.
وردد السلسلة قدمنا ​​مرة أخرى
لنا في المحطة.
حدث هذا لأن الدالة printf كتب إلى
دعا تيار من معيار، أو S-T-D خارج.
عند كتابة شيء لSTDOUT، انها افتراضيا
عرض من قبل المحطة.
>> ذلك أن كل شيء حسن وجيد، ولكن ماذا لو، بدلا من مجرد
عرض السلسلة، أردنا أن حفظه إلى ملف؟
على سبيل المثال، قد كنا نريد أن نتذكر بالضبط ما لدينا
لم البرنامج عندما كنا أعطاه مدخل معين في وقت لاحق.
ونهج واحد يكون القيام بذلك في برنامج C لدينا، وذلك باستخدام
بعض وظائف خاصة للكتابة على الملفات التي سنقوم
نرى في فيديو آخر.
حتى أسهل، على الرغم من ذلك، على نحو ما هو
إعادة توجيه STDOUT إلى ملف.
وبهذه الطريقة، عندما يكتب إلى stdout printf، سوف محتويات
أن تكون مكتوبة إلى ملف بدلا من
عرض من قبل المحطة.
تابعنا يمكن أن نفعل ذلك فقط عن طريق إضافة علامة أكبر من،
بواسطة اسم الملف، إلى الأمر نستخدمها لتنفيذ برنامجنا.
>> لذلك، بدلا من تنفيذ ببساطة. / إعادة توجيه، لا يمكننا
تشغيل / إعادة توجيه، تليها علامة أكبر من، تليها
اسم الملف، مثل file.txt.
دعونا نرى ما سيحدث.
OK.
لاحظ أن هذا الوقت، كان عرض أي شيء في المحطة،
لكننا لم تعديل محتويات موقعنا
C برنامج على الإطلاق.
دعونا الآن دراسة محتويات هذا الدليل مع LS.
>> حسنا.
لدينا الآن ملف جديد في دليلنا دعا file.txt،
الذي هو اسم الملف زودنا عندما هربنا لدينا
إعادة توجيه البرنامج.
دعونا فتح file.txt.
وهنا، يمكننا أن نرى أن إعادة توجيه STDOUT من كان
كتبت إلى ملف يسمى file.txt.
لذلك دعونا تشغيل الأمر السابق مرة أخرى، ولكن توريد
مدخلات مختلفة هذه المرة.
حسنا.
دعونا نلقي نظرة على file.txt الآن.
>> هنا يمكننا أن نرى أن الملف قد تمت الكتابة، لذلك لدينا
إدخال الأصلي ليس هناك بعد الآن.
إذا كنا نريد لإلحاق بدلا لهذا الملف، ووضع جديد
إدخال أدناه محتويات القائمة من الملف، لا يسعنا
استخدام اثنين من أكبر من علامات بدلا من واحدة فقط.
دعونا نحاول ذلك.
الآن، إذا كان لنا أن فتح file.txt مرة أخرى، يمكننا أن نرى كل من دينا
إدخال خطوط.
في بعض الحالات، قد نريد أن تجاهل أي
خرج من برنامجنا.
بدلا من كتابة الإخراج إلى ملف ثم حذف
الملف عندما ننتهي معها، يمكننا إرسال بريد إلى الخاص
دعا الملف / ديف / لاغية.
عند كتابة أي شيء ل/ dev/null--
أو لمجرد devnull قصيرة -
يتم تجاهل تلقائيا.
أعتقد ذلك من devnull كما الثقب الأسود للبيانات الخاصة بك.
>> حتى الآن لقد رأينا كيف علامة أكبر من يمكن إعادة توجيه
STDOUT، دعونا نرى كيف يمكننا إعادة توجيه القياسية في -
أو S-T-D-في -
والتماثلية من STDOUT.
بينما ظائف مثل printf الكتابة إلى دفق دعا
STDOUT، GetString وظائف مماثلة قراءة من مجرى
دعا ستدين، والتي، بشكل افتراضي، هو تيار من
حرف كتبته على لوحة المفاتيح.
تابعنا يمكن إعادة توجيه STDIN باستخدام أقل من تسجيل،
قبل اسم الملف.
الآن، بدلا من مطالبة المستخدم لإدخال في
محطة، وسوف برنامج فتح الملف المحدد ونحن استخدام
في خطوط كإدخال.
>> دعونا نرى ما سيحدث.
كبيرة.
وقد طبع في السطر الأول من file.txt إلى محطة
لأننا يدعو GetString مرة واحدة.
لو كان لدينا مكالمة أخرى إلى GetString في برنامجنا، في
كان يمكن أن السطر التالي من file.txt تستخدم
المدخلات لهذه الدعوة.
مرة أخرى، نحن لم تعديل برنامجنا C على الإطلاق.
نحن فقط تغيير الطريقة التي تعمل بها.
وتذكر أيضا، ونحن لم STDOUT توجيه هذه المرة،
لذلك كان الناتج من البرنامج مازال
عرض في محطة.
يمكننا، بطبيعة الحال، إعادة توجيه كل من ستدين
وSTDOUT مثل هذا.
الآن، file2.txt يحتوي على السطر الأول من file.txt.
>> لذلك، وذلك باستخدام هذه العوامل، لقد كنا قادرين على القراءة و
الكتابة من ملفات نصية.
الآن، دعونا نرى كيف يمكننا استخدام الناتج من برنامج واحد كما
المدخل إلى برنامج آخر.
حتى هنا برنامج آخر بسيط I C
ودعا hello.c هنا.
كما ترون، هذا ببساطة إخراج "مرحبا
هناك! "للمستخدم.
إذا كنت تريد إعادة توجيه لاستخدام مدخلات الإنتاج من مرحبا -
برنامج آخر -
ويمكنني أن إعادة توجيه لأول مرة من STDOUT مرحبا إلى ملف يسمى
input.txt، ثم إعادة توجيه STDIN من إعادة توجيه إلى أن نفس
الملف - input.txt.
حتى أتمكن من القيام به. / مرحبا> input.txt.
اضغط Enter لتنفيذ ذلك.
تليها. / إعادة توجيه <
input.txt، وتنفيذ ذلك.
حتى نتمكن من تقصير هذا قليلا مع فاصلة منقوطة، والذي يسمح
لنا لتشغيل اثنين أو أكثر من الأوامر في نفس السطر.
لذلك أستطيع أن أقول، / مرحبا> input.txt، منقوطة،
/ إعادة توجيه <input.txt.
>> حتى هذا يعمل، ولكنه لا يزال يشعر ائقة جدا.
أعني، هل نحن حقا في حاجة هذا الملف النصي هذا الوسيط
لم يعد من الضروري بعد توجيه أشواط؟
لحسن الحظ، لا يمكننا تجنب هذا الملف النصي باستخدام ما هو خارج
دعا أنبوب.
إذا قلت، / مرحبا |.. / إعادة توجيه، ثم STDOUT من
برنامج على اليسار -
في هذه الحالة، مرحبا -
وسوف تستخدم كمدخل القياسية لل
برنامج على اليمين.
في هذه الحالة، إعادة توجيه. لذلك دعونا تشغيل هذا.
>> هناك نذهب.
يمكننا أن نرى أنه تم استخدام مخرجات مرحبا كإدخال
لإعادة توجيه.
ذلك عن طريق مد أنابيب معا باستخدام الأوامر، نشكل ما
يسمى خط الانابيب منذ انتاجنا تتحرك أساسا
من خلال سلسلة من الأوامر.
باستخدام الأنابيب، يمكننا أن نفعل بعض الاشياء باردة دون الحاجة إلى
كتابة أي رمز على الإطلاق.
على سبيل المثال، دعنا نقول أننا نريد أن نعرف كم عدد الملفات
داخل هذا الدليل.
باستخدام الأنابيب، ويمكننا الجمع بين الأمر ls مع حمامات -
أو wordcount -
الأوامر.
سوف LS إخراج كل ملف في الدليل إلى STDOUT، و
سوف يقول لنا كيف مرحاض العديد من خطوط أعطيت له عن طريق ستدين.
لذلك، إذا قلنا ليرة سورية | WC-L -
تزويد L-WC العلم ليقولوا ذلك لحساب خطوط -
يمكننا أن نرى بالضبط عدد الملفات
في الدليل الحالي.
>> لذلك دعونا نلقي نظرة على مثال آخر.
لدي هنا ملف يسمى students.txt،
مع قائمة من الأسماء.
ومع ذلك، هذه الأسماء ليست في أي ترتيب كل شيء، ويبدو أنه
وتتكرر مثل عدد قليل من الأسماء.
ما نريده هو قائمة أسماء فريدة من نوعها في الأبجدي
أجل، حفظها إلى ملف يسمى final.txt.
يمكننا، بطبيعة الحال، كتابة برنامج C للقيام بذلك بالنسبة لنا.
لكنه سيحتاج للحصول داع
مجمع بسرعة كبيرة.
دعونا بدلا من استخدام الأنابيب وبعض المدمج في أدوات للحل
هذه المشكلة.
>> أول شيء يتعين علينا القيام به هو قراءة students.txt الملف.
والأمر القط يفعل ذلك فقط.
وسوف نقرأ في الملف المحدد وكتابة
محتوياته إلى STDOUT.
بعد أن قرأت الملف النصي، سنقوم
نريد لفرز الأسماء.
يمكن الأمر التعامل مع هذا النوع بالنسبة لنا.
سيصنف إخراج خط المقدمة عبر ستدين إلى STDOUT
من أجل فرزها.
من أجل تزويد محتويات students.txt إلى
ستدين نوع، ويمكن أن نستخدم أنبوب الجمع بين القط والفرز.
حتى أتمكن من تنفيذ القط students.txt | نوع و
اضغط على Enter.
والآن، ونحن نرى محتويات students.txt في
ترتيب هجائي.
>> لذلك دعونا إضافة أمر آخر -
UNIQ، أو فريدة من نوعها -
لدينا خط أنابيب.
كما قد يتبادر إلى ذهنك، UNIQ، عندما زودت تسلسل مصنفة من
خطوط عبر ستدين، سوف إخراج خطوط فريدة من نوعها.
حتى الآن لدينا students.txt القط
| النوع | UNIQ.
وأخيرا، يمكننا حفظ الإخراج من خط الأنابيب إلى
ملف عن طريق students.txt القط | نوع | UNIQ
> final.txt.
لذلك، إذا كان لنا أن فتح final.txt، لدينا بالضبط ما كنا
أبحث عن:
قائمة بأسماء فريدة من نوعها في الترتيب الأبجدي،
حفظها إلى ملف نصي.
من جانب الطريق، ونحن يمكن أيضا وقال النوع <
students.txt | UNIQ> final.txt للقيام بالضبط
الشيء نفسه، وذلك باستخدام كل من مشغلي رأيناه في
هذا الفيديو.
>> اسمي تومي، وهذا هو CS50.