[Powered by Google Translate] TOMMY: Trong video này, chúng ta sẽ tìm hiểu về chuyển hướng và đường ống. Cho đến nay, chúng tôi đã sử dụng các chức năng như printf dữ liệu đầu ra thiết bị đầu cuối và các chức năng như GetString để cho phép người sử dụng để cung cấp đầu vào của chúng tôi chương trình bằng cách sử dụng bàn phím. Hãy nhanh chóng lấy một cái nhìn tại một chương trình nhận được một dòng đầu vào từ người dùng và sau đó kết quả đầu ra. On line 7, chúng tôi đang khiến người sử dụng cho một chuỗi, và sau đó trên hàng 8, chúng tôi đang in nó trở lại ra ngoài. Hãy để biên dịch và chạy chương trình của chúng tôi. Lớn. Chuỗi chúng tôi cung cấp được lặp lại cho chúng tôi tại các thiết bị đầu cuối. Điều này xảy ra bởi vì chức năng printf viết cho một dòng gọi là tiêu chuẩn ra ngoài, hoặc s-t-d-out. Khi một cái gì đó được viết vào thiết bị xuất chuẩn, đó là theo mặc định hiển thị bởi thiết bị đầu cuối. Vì vậy, đó là tất cả tốt và tốt, nhưng những gì nếu, thay vì chỉ hiển thị chuỗi, chúng tôi muốn để lưu nó vào một tập tin? Ví dụ, chúng ta cần phải nhớ chính xác những gì chúng tôi chương trình đã làm khi chúng tôi đã cho nó một đầu vào cụ thể sau. Một cách tiếp cận sẽ được để làm điều này trong chương trình C của chúng tôi, bằng cách sử dụng một số chức năng đặc biệt để ghi vào tập tin rằng chúng tôi sẽ xem trong video khác. Dễ dàng hơn, tuy nhiên, sẽ là bằng cách nào đó chuyển hướng stdout vào một tập tin. Bằng cách đó, khi printf ghi vào thiết bị xuất chuẩn, nội dung sẽ được viết vào một tập tin chứ không phải là hiển thị bởi thiết bị đầu cuối. Chúng ta có thể làm điều đó bằng cách thêm một dấu hiệu lớn hơn, tiếp bởi một tên tập tin, lệnh chúng tôi sử dụng để thực hiện chương trình của chúng tôi. Vì vậy, thay vì chỉ đơn giản là thực hiện / chuyển hướng, chúng ta có thể chạy / chuyển hướng, tiếp theo lớn hơn dấu hiệu, tiếp theo tên tập tin, như file.txt. Hãy xem những gì xảy ra. OK. Chú ý rằng thời gian này, không có gì được hiển thị ở thiết bị đầu cuối, nhưng chúng tôi đã không được sửa đổi nội dung của chúng tôi C chương trình ở tất cả. Bây giờ chúng ta hãy kiểm tra các nội dung của thư mục này với ls. Được rồi. Bây giờ chúng ta có một tập tin mới trong thư mục của chúng tôi được gọi là file.txt, đó là tên tập tin chúng tôi cung cấp khi chúng tôi chạy của chúng tôi Chuyển hướng chương trình. Hãy mở ra file.txt. Và ở đây, chúng ta có thể thấy rằng thiết bị xuất chuẩn của chuyển hướng bằng văn bản cho các tập tin được gọi là file.txt. Vì vậy, hãy chạy lệnh trước đó một lần nữa, nhưng cung cấp một khác nhau vào thời điểm này. Okay. Hãy có một cái nhìn tại file.txt. Chúng ta có thể thấy ở đây rằng các tập tin đã được ghi đè, do đó, chúng tôi ban đầu vào là không còn ở đó nữa. Nếu chúng ta thay vì muốn nối thêm vào tập tin này, đặt mới đầu vào dưới đây các nội dung của tập tin hiện có, chúng tôi có thể sử dụng hai dấu lớn hơn thay vì chỉ một. Hãy cố gắng đó. Bây giờ, nếu chúng ta mở file.txt một lần nữa, chúng ta có thể nhìn thấy cả hai của chúng tôi đầu vào dòng. Trong một số trường hợp, chúng tôi có thể muốn loại bỏ bất kỳ đầu ra của chương trình của chúng tôi. Thay vì viết đầu ra vào một tập tin và sau đó xóa các tập tin khi chúng tôi đang thực hiện với nó, chúng tôi có thể viết một để đặc biệt tập tin gọi là / dev / null. Khi bất cứ điều gì được ghi vào / dev/null-- hoặc chỉ devnull tắt - nó sẽ tự động bị loại bỏ. Vì vậy, suy nghĩ của devnull như một lỗ đen cho dữ liệu của bạn. Vì vậy, bây giờ chúng tôi đã nhìn thấy dấu hiệu lớn hơn như thế nào có thể chuyển hướng stdout, chúng ta hãy xem làm thế nào chúng ta có thể chuyển hướng tiêu chuẩn trong - hoặc s-t-d-trong tương tự của thiết bị xuất chuẩn. Trong khi chức năng như printf viết thư cho các dòng được gọi là stdout, GetString và các chức năng tương tự đọc từ suối gọi là stdin, trong đó, theo mặc định, là dòng ký tự gõ vào bàn phím. Chúng tôi có thể chuyển hướng stdin bằng cách sử dụng dấu nhỏ hơn, tiếp một tên tập tin. Bây giờ, hơn là khiến người sử dụng cho đầu vào tại thiết bị đầu cuối, một chương trình sẽ mở các tập tin chúng tôi quy định và sử dụng dòng của nó như là đầu vào. Hãy xem những gì xảy ra. Lớn. Dòng đầu tiên của file.txt đã được in đến nhà ga bởi vì chúng tôi đang gọi điện thoại GetString một lần. Nếu chúng ta có một cuộc gọi đến GetString trong chương trình của chúng tôi, dòng tiếp theo của file.txt sẽ được sử dụng như đầu vào cho cuộc gọi đó. Một lần nữa, chúng tôi đã không được sửa đổi chương trình C của chúng tôi tất cả. Chúng tôi chỉ thay đổi cách chúng ta chạy nó. Và cũng nhớ, chúng tôi đã không chuyển hướng stdout thời gian này, do đó, đầu ra của chương trình vẫn còn hiển thị ở thiết bị đầu cuối. Chúng ta có thể, tất nhiên, chuyển hướng cả hai thiết bị nhập chuẩn và thiết bị xuất chuẩn như thế này. Bây giờ, file2.txt chứa dòng đầu tiên của file.txt. Vì vậy, bằng cách sử dụng các nhà khai thác, chúng tôi đã có thể đọc và viết từ các tập tin văn bản. Bây giờ, chúng ta hãy xem làm thế nào chúng ta có thể sử dụng đầu ra của một chương trình đầu vào cho chương trình khác. Vì vậy, đây là một chương trình C đơn giản khác ở đây gọi là hello.c. Như bạn có thể thấy, đây chỉ đơn giản là kết quả đầu ra "Hi "cho người sử dụng! Nếu tôi muốn chuyển hướng sử dụng như là đầu vào đầu ra của hello - chương trình khác - Lần đầu tiên tôi có thể chuyển hướng stdout của hello một tập tin gọi là INPUT.TXT, sau đó chuyển hướng stdin của chuyển hướng cho rằng cùng file INPUT.TXT Vì vậy, tôi có thể làm. / Hello> INPUT.TXT. Nhấn Enter để thực hiện điều này. Tiếp theo / chuyển hướng < INPUT.TXT, và thực hiện điều đó. Vì vậy, chúng ta có thể rút ngắn một chút với một dấu chấm phẩy, cho phép chúng tôi chạy hai hoặc nhiều lệnh trên cùng một dòng. Vì vậy, tôi có thể nói, / hello> INPUT.TXT, dấu chấm phẩy, / Chuyển hướng Final.txt. Vì vậy, nếu chúng ta mở ra final.txt, chúng tôi có chính xác những gì chúng tôi đã tìm kiếm một danh sách các tên duy nhất trong thứ tự chữ cái, lưu vào một tập tin văn bản. Bằng cách này, chúng ta cũng có thể nói sort < students.txt | uniq> final.txt để làm chính xác điều tương tự, bằng cách sử dụng của các nhà khai thác chúng ta đã thấy video này. Tên tôi là Tommy, và điều này là CS50.