[Powered by Google Translate] טומי: בסרטון הזה, אנו לומדים על הפניית וצינורות. עד כה, יש כבר משתמשות בפונקציות כמו printf כדי נתוני פלט למסוף ופונקציות כמו GetString כדי לאפשר למשתמש לספק הקלט ל תכנית שימוש במקלדת. בואו נעיף מבט מהיר בתכנית שמקבלת שורה של קלט מהמשתמש ולאחר מכן פלטיו. ביום 7 בשורה, אנחנו מעודדים את המשתמש למחרוזת, ו אז בשורה 8, אנחנו מדפיסים אותו בחזרה החוצה. בואו לקמפל ולהריץ את התכנית שלנו. גדול. המחרוזת ספקנו הדהדה בחזרה לנו במסוף. זה קרה משום שפונקצית printf כתבה לי זרם קרא סטנדרטי, או S-t-d-out. כאשר משהו כתוב ל stdout, זה כברירת מחדל מוצג על ידי המסוף. אז זה טוב ויפה, אבל מה אם, במקום פשוט הצגת המחרוזת, רציתי לשמור אותו לקובץ? לדוגמה, יתכן שעלינו לזכור מה בדיוק תכנית הייתי כשנתנו לו קלט מסוים מאוחר יותר. גישה אחת תהיה לעשות את זה בתכנית C שלנו, באמצעות כמה פונקציות מיוחדות לכתיבה לקבצים שעוד לראות בוידאו אחר. אפילו קל יותר, אם כי, יהיה איכשהו להפנות stdout לקובץ. בדרך זו, כאשר כותב printf ל stdout, תוכן ייכתב לקובץ ולא מוצג על ידי המסוף. אנחנו יכולים לעשות בדיוק את זה על ידי הוספת סימן גדול מ, ואחרי לפי שם קובץ, לפקודתו אנו משתמשים כדי לבצע את התכנית שלנו. אז, ולא רק ביצוע. / להפנות, אנחנו יכולים לרוץ. / לנתב, ואחרי יותר מסימן, ואחריו שם קובץ, כמו file.txt. בואו לראות מה קורה. אישור. שים לב, זה זמן, שום דבר לא מוצג במסוף, אבל אנחנו לא שינינו את התוכן שלנו תכנית C בכלל. עכשיו בואו נבחן את התוכן של מדריך זה עם LS. בסדר. עכשיו יש לנו קובץ חדש בספרייה שלנו נקרא file.txt, שהוא שם הקובץ שספקנו כשרצנו הפנית תכנית. בואו לפתוח file.txt. וכאן, אנו יכולים לראות כי stdout מתוך להפנות היה כתב לקובץ שנקרא file.txt. אז בואו להפעיל את הפקודה הקודמת שוב, אבל אספקה קלט שונה הפעם. אוקיי. בואו נסתכל file.txt עכשיו. אנחנו יכולים לראות כאן שהקובץ הוחלף, כך שלנו קלט מקורי הוא כבר לא שם. אם אנחנו רוצים במקום לצרף לקובץ זה, לשים חדש הקלט להלן את התוכן הקיים של הקובץ, אנחנו יכולים להשתמש בשני שלטים גדולים מ רק במקום אחד. בואו ננסה את זה. עכשיו, אם אנחנו פותחים file.txt שוב, אנחנו יכולים לראות גם משלנו קווי הזנה. במקרים מסוימים, יתכן שעלינו להניח כל פלט של התכנית שלנו. במקום לכתוב את הפלט לקובץ ולאחר מכן למחוק קובץ כאשר אנחנו עושים עם זה, אנחנו יכולים לכתוב למיוחדים קובץ בשם / dev / null. כאשר משהו כתוב ל/ dev/null-- או סתם devnull בקיצור - הוא מושלך באופן אוטומטי. אז תחשוב devnull כחור שחור עבור הנתונים שלך. אז עכשיו אנו רואים כיצד יותר מאשר הסימן יכול להפנות stdout, בואו לראות איך אנו יכולים להפנות סטנדרטיים ב-- או s-t-d-ב-- האנלוגי של stdout. בעוד פונקציות כמו printf לכתוב לנחל בשם stdout, GetString ופונקציות דומות לקרוא מהזרם נקרא stdin, אשר, כברירת מחדל, הוא הזרם של תווים מוקלדים במקלדת. אנו יכולים להפנות stdin שימוש פחות מסימן, ואחרי לפי שם קובץ. עכשיו, במקום לשאול את המשתמש עבור קלט ב מסוף, תכנית יפתח את הקובץ שצוינו ולהשתמש הקווים שלה כקלט. בואו לראות מה קורה. גדול. השורה הראשונה של file.txt כבר מודפסת לטרמינל בגלל שאנחנו קוראים GetString פעם אחת. אם היו לנו שיחה נוספת לGetString בתכנית שלנו, השורה הבאה של file.txt הייתה לשמש קלט לאותה קריאה. שוב, יש לנו לא שונה תכנית C שלנו בכלל. אנחנו רק שינוי אופן בו אנו מפעילים אותו. וגם לזכור, שלא יופנו stdout הזמן הזה, לכן הפלט של התכנית היה עדיין מוצג במסוף. אנחנו יכולים, כמובן, להפנות גם stdin וstdout כזה. עכשיו, file2.txt מכיל את השורה הראשונה של file.txt. לכן, שימוש באופרטורים אלה, אנחנו כבר יכולים לקרוא ו לכתוב מקבצי טקסט. עכשיו, בואו לראות איך אנחנו יכולים להשתמש בפלט של תכנית אחת כ הקלט לתכנית אחרת. אז הנה תכנית C פשוטה אחרת אני כאן קרא hello.c. כפי שאתה יכול לראות, זה פשוט פלטים "היי יש! "למשתמש. אם אני רוצה להפנות לשימוש כקלט הפלט של שלום - תכנית אחרת - אני יכול להפנות את stdout של שלום ראשון לקובץ שנקרא input.txt, אז להפנות stdin של הפניה לאותו קובץ - input.txt. אז אני יכול לעשות. / שלום> input.txt. לחץ על Enter כדי לבצע את זה. ואחרי. / להפנות < input.txt, ולבצע את זה. אז אנחנו יכולים לקצר את זה קצת בנקודת פסיק, המאפשר להפעילנו שתי פקודות או יותר על אותו הקו. אז אני יכול לומר,. / שלום> input.txt, פסיק, . / להפנות Final.txt. לכן, אם אנחנו פותחים final.txt, יש לנו בדיוק את מה שהיינו מחפש: רשימה של שמות ייחודיים בסדר אלפביתי, נשמר בקובץ טקסט. דרך אגב, אנחנו גם יכולים לומר סוג < students.txt | uniq> final.txt לעשות בדיוק אותו הדבר, באמצעות כל אחד מהמפעילים שראינו ב זה וידאו. השמי הוא טומי, וזה CS50.