Xin chào và chào mừng trở lại.
Chúng tôi đang ở trong một phần mới.
Phần này là tất cả về đầu vào và đầu ra tệp và ghi và đọc từ tệp.
Chúng ta sẽ tập trung vào các tệp văn bản, nhưng chúng ta cũng sẽ nói về các tệp nhị phân.
Trong bài giảng này, tôi chỉ muốn cung cấp một cái nhìn tổng quan, cho bạn biết tệp là gì và cho bạn biết
cách sử dụng tốt để lưu trữ dữ liệu liên tục.
Vì vậy, cho đến thời điểm này, tất cả dữ liệu mà chương trình của chúng tôi truy cập đều thông qua bộ nhớ.
Chúng ta đã quen thuộc với khái niệm này về các biến, cấu trúc, bất kể nó là gì.
Xóa tất cả dữ liệu mà chương trình của bạn sử dụng trong bộ nhớ.
Và lý do nó được lưu trữ trong bộ nhớ là vì ký ức thực sự rất nhanh và bạn có thể truy cập nó nhanh
chóng để thực hiện các phép tính.
Bạn đang thực hiện chu trình tìm nạp, thực thi, tất cả những thứ đó.
Vì vậy, phạm vi, nhưng nó cũng bị hạn chế bởi vì phạm vi và sự đa dạng của các ứng dụng của chúng
tôi, nếu nó chỉ sử dụng bộ nhớ, nó sẽ bị hạn chế phần nào.
Chúng tôi biết rằng bộ nhớ sẽ biến mất khi chương trình biến mất, và do đó, điều đó có thể rất hạn chế.
Tất cả các ứng dụng kinh doanh nghiêm trọng đều yêu cầu nhiều dữ liệu hơn so với dung lượng chứa trong bộ nhớ chính.
Bộ nhớ chính cũng rất nhỏ, phải lên.
Và ngày nay bạn có thể nhận được rất nhiều bộ nhớ, 1630 đến 32 gigabyte.
Nhưng trước đây, và đặc biệt là trên các thiết bị nhúng, bạn không có nhiều RAM và kết quả là các ứng dụng của bạn
rất hạn chế vì không gian và kích thước.
Bạn thực sự chỉ muốn lưu trữ các biến và những thứ tương tự trong bộ nhớ chính.
Nó cũng do bộ nhớ chính biến mất khi chương trình biến mất.
Bạn không thể có bất kỳ dữ liệu nào được lưu trữ liên tục qua các lần khởi động lại.
Vì vậy, tất cả phụ thuộc vào khả năng xử lý dữ liệu liên tục và được lưu trữ trên một thiết bị bên ngoài
như ổ đĩa cứng các chương trình lớn này.
Vì vậy, bạn muốn có khả năng này để lưu trữ trên ổ cứng.
Nó chậm hơn một chút, nhưng bạn có thể lưu trữ nhiều dữ liệu trên đó và các chương trình lớn cần lưu trữ
nhiều dữ liệu.
C cung cấp nhiều chức năng trong tiêu chuẩn tệp tiêu đề để ghi và đọc từ các thiết bị bên ngoài.
Bạn không phải viết mã của riêng mình để đọc và ghi các tệp, nhưng bạn có thể thấy lợi thế
mà các ứng dụng mang lại là khả năng lưu trữ dữ liệu trong một khoảng thời gian dài hơn.
Rất nhiều lợi thế.
Thiết bị bên ngoài bạn sẽ sử dụng để lưu trữ và truy xuất dữ liệu thường là ổ cứng,
ổ đĩa.
Tuy nhiên, các chức năng của tệp tiêu đề mà chúng ta sẽ nói về bạn có thể sử dụng trên bất kỳ thiết bị lưu trữ bên ngoài
nào.
Vì vậy, bạn có thể sử dụng nó trên ổ USB, bạn có thể sử dụng nó trên bất kỳ thiết bị bên ngoài nào lưu trữ dữ liệu và ổ SSD bất
kỳ thứ gì với tất cả các ví dụ.
Cho đến nay, bất kỳ dữ liệu nào mà người dùng nhập vào đều bị mất.
Sau khi kết thúc chương trình, điều này được gọi là bộ nhớ dễ bay hơi.
Bất cứ khi nào bạn nghe thấy thuật ngữ vol time memory, điều đó có nghĩa là bộ nhớ không liên tục hoặc dữ liệu
không liên tục.
Nó sẽ biến mất khi chương trình kết thúc hoặc nếu máy khởi động lại.
Vì vậy, nếu người dùng muốn chạy chương trình với cùng một dữ liệu, anh ta phải nhập lại nó mỗi lần để
nó được khôi phục.
Nó rất bất tiện.
Nó giới hạn lập trình.
Và một lần nữa, đây là bộ nhớ dễ bay hơi.
Khi bạn lưu trữ nội dung trong tệp và lưu trữ trên ổ cứng, đây là bộ nhớ vĩnh viễn.
Nó vẫn ở đó.
Ngay cả khi bạn khởi động lại máy hoặc khi chương trình của bạn không chạy.
Đó được gọi là bộ nhớ không bay hơi vì nó nằm xung quanh một tệp, có thể lưu trữ dữ liệu không bay hơi và thường được
lưu trữ trên đĩa hoặc ngày nay là ổ đĩa trạng thái rắn và SSD.
Đó là một phần lưu trữ được đặt tên và IO tiêu chuẩn stud là một tệp chứa việc sử dụng thông tin
để có thể đọc và ghi vào các tệp đó.
Nhưng chúng tôi sẽ sử dụng khái niệm ghi và đọc dữ liệu từ một tệp để lưu trữ vĩnh viễn
và bạn sẽ nhận thấy cách các ứng dụng của mình trở nên hữu ích hơn, mạnh mẽ hơn, có thể mở rộng hơn nhiều, bởi vì bây
giờ chúng tôi có khả năng để lưu trữ một lượng lớn dữ liệu và chúng ta cũng không phải lo lắng về việc dữ liệu sẽ biến
mất bất cứ khi nào chương trình kết thúc hoặc máy tính khởi động lại.
Vì vậy, nó sẽ rất, rất thuận lợi khi sử dụng tệp.
Một tệp bên trong của hệ điều hành Linux hoặc hệ điều hành Windows được lưu trữ theo một cách nhất định.
Nhưng theo như ngôn ngữ lập trình C, nó chỉ là một chuỗi các byte trong mỗi byte có thể được
đọc riêng lẻ.
Điều này tương ứng với cấu trúc tệp trong Unix, nhưng nó không nhất thiết.
Nó chỉ tạo ra sự khác biệt khi bạn đang đọc các tệp văn bản và cửa sổ, bởi vì bạn có thể
có thêm các ký tự mà bạn phải lo lắng về kích thước liên quan, nhưng đó chỉ là một chuỗi byte.
Vì vậy, nếu bạn có một tệp văn bản và nó có nhiều byte hơn, bạn vẫn có thể đọc các byte đó.
Bạn chỉ cần hiểu những byte đó đang đại diện cho những gì.
Vì vậy, đây là những gì một tệp trông như thế nào và cách chúng ta sẽ đọc và ghi vào nó bằng ngôn ngữ lập
trình C.
Nó chỉ là một loạt các byte với các hiệu số khác nhau.
Phần đầu của tệp sẽ bằng 0 và sau đó bạn luôn có thể tìm thấy các vị trí khác nhau
trong tệp.
Có thể là bốn, có thể là bốn bằng mười hai, có thể là 100 byte vào đó.
Và sau đó bạn có phần cuối của tệp và phần cuối của tệp thường được đánh dấu bằng một điểm đánh dấu đặc biệt gọi
là EOF và một tệp.
Vì vậy, một tệp có đầu và cuối và vị trí hiện tại.
Vị trí hiện tại được xác định rất nhiều byte ngay từ đầu.
Vị trí hiện tại là nơi bất kỳ hành động tệp nào sẽ diễn ra.
Bạn sẽ viết hoặc bạn sẽ đọc ở vị trí đó.
Và chúng ta cũng sẽ nói về một số chức năng mà bạn có thể di chuyển xung quanh để di chuyển vị trí hiện tại đến bất kỳ nơi
nào bạn muốn trong tệp.
Ngay cả khi kết thúc, nếu bạn muốn đọc ở cuối hoặc phải đến cuối.
Có hai loại tệp.
Có tệp văn bản và tệp nhị phân.
Tệp văn bản là dữ liệu được viết dưới dạng một chuỗi các ký tự được tổ chức thành các dòng.
Mỗi dòng kết thúc bằng một dòng mới và dữ liệu văn bản có thể thay đổi theo từng hệ thống tùy thuộc vào cách các
ký tự được diễn giải.
Vì vậy, ví dụ, trên Windows trong DOS, mọi dòng đều có ký tự xuống dòng và nguồn cấp dữ liệu dòng, vì vậy dấu gạch chéo ngược R và dấu
gạch chéo ngược N.
Và vì vậy khi bạn đọc dữ liệu hoặc ghi dữ liệu, bạn phải hiểu điều này vì định dạng hơi khác
một chút.
Nhưng trên Linux, bạn không có dấu gạch chéo ngược.
R Vì vậy, bạn phải hiểu cách dữ liệu văn bản được viết, mặc dù nó được sắp xếp theo các dòng và là một chuỗi các byte,
dữ liệu nhị phân được viết dưới dạng một chuỗi các byte chính xác như chúng xuất hiện trong bộ nhớ.
Vì vậy, ví dụ về các tệp có dữ liệu nhị phân là dữ liệu.
Các tệp của chúng tôi như dữ liệu hình ảnh hoặc tệp nhị phân mã hóa âm nhạc không thể đọc được.
Nếu bạn cố gắng đưa chúng lên trong trình soạn thảo văn bản vì chúng chỉ là byte, chúng ta sẽ tập trung vào các tệp
văn bản trong phần này, nhưng bạn có thể ghi bất kỳ dữ liệu nào bạn thích vào một tệp.
Bạn có thể viết nó dưới dạng một chuỗi byte và cách chúng xuất hiện trong bộ nhớ hoặc bạn có thể viết dưới dạng văn bản.
Nhưng một khi tệp thực sự đã được viết, nó sẽ chỉ bao gồm một loạt các byte, ngay cả khi nó được
biểu diễn dưới dạng văn bản.
Bạn có thể xem các tệp văn bản trong trình chỉnh sửa, điều này làm cho nó dễ đọc hơn.
Bạn phải hiểu rằng định dạng của tệp để đọc nó và đây là những gì tôi đã
đề cập đến nếu bạn đang chạy trên DOS Windows hoặc Linux, nơi Windows có thể có thêm các ký tự khi nó ghi
dữ liệu.
Vì vậy, một chuỗi 12 byte trong một tệp nhị phân có thể là 12 ký tự, nó có thể là 12 số nguyên có
dấu tám x tám bit hoặc 12 số nguyên không dấu.
Các đám cháy nhị phân đặc biệt phức tạp vì chúng chỉ lưu trữ Watson dưới dạng bộ nhớ biểu kiến.
Vì vậy, ở chế độ nhị phân, mỗi bit của tệp đều có thể truy cập được.
Nhưng để đọc một cái gì đó từ một tệp, bạn phải hiểu những gì trong đó cũng như dữ liệu và cách nó được
lưu trữ.
Và nó có thể phụ thuộc vào hệ thống bạn đang chạy.
Và nó cũng sẽ phụ thuộc vào văn bản hay nhị phân.
Dòng suối.
Chương trình C được tự động mở trên ba tệp thay mặt bạn.
Luồng có thể đại diện cho một tệp, nhưng luồng là một thuật ngữ chung chung hơn có thể đại diện cho bất kỳ loại đầu vào nào.
Vì vậy, nó có thể đại diện cho bàn phím, nó có thể đại diện cho bàn điều khiển, nó có thể đại diện cho một tệp, nó có thể
đại diện cho một ổ cắm.
Nếu bạn đã quen với các luồng mạng là một thuật ngữ chung chung hơn và có ba luồng được
mở tự động cho bạn bằng ngôn ngữ lập trình C.
Một là đầu vào tiêu chuẩn và đây là thiết bị đầu vào bình thường của hệ thống của bạn.
Thông thường, theo mặc định, đó là bàn phím.
Chúng tôi đã sử dụng đầu vào tiêu chuẩn khi quét F, nhưng bạn thực sự có thể sử dụng tính năng tắt quét để đọc
từ các tệp.
Nếu bạn thay đổi luồng đầu vào, có thể bạn thay đổi luồng đầu vào thành đầu ra tiêu chuẩn tệp, điều này thường
hiển thị trên màn hình, thường là thông qua bảng điều khiển.
Lỗi tiêu chuẩn cũng xuất hiện trên màn hình, nhưng bạn thường phải chuyển hướng nó để xem nó bằng
cách sử dụng như ký hiệu và ba hoặc tương tự như vậy.
Nhưng đây là ba kết quả mà tôi đã đề cập.
Đầu vào tiêu chuẩn là tệp được đọc bằng guitar và quét F Đầu ra tiêu chuẩn được sử dụng bởi đầu ra chúng tôi và bản
in F mà chúng tôi chủ yếu sử dụng printf.
Bạn cũng có thể chuyển hướng các tệp trên hệ thống để được công nhận là đầu ra đầu vào tiêu chuẩn.
Đây là chuyển hướng.
Đây là một khái niệm hệ điều hành trong đó bạn có thể chuyển hướng dữ liệu, gửi đầu ra đến một tệp, ví dụ: hoặc
gửi đầu vào, nhận đầu vào từ một tệp trái ngược với tiêu chuẩn.
Đây là nơi bạn có thể sử dụng các ký hiệu nhỏ hơn hoặc lớn hơn.
Mục đích của đầu ra lỗi tiêu chuẩn là cung cấp một nơi khác biệt về mặt logic để gửi thông báo lỗi.
Vì vậy, nó là loại riêng biệt mặc dù nó được hiển thị trên màn hình.
Để truy cập nó, bạn phải có lệnh đặc biệt.
Luồng là một đại diện trừu tượng của bất kỳ nguồn hoặc đích bên ngoài nào cho dữ liệu.
Đây là lý do tại sao nó chung chung hơn là một tệp.
Bàn phím.
Dòng lệnh trên các tệp hiển thị của bạn trên đĩa.
Đó là tất cả các ví dụ về cách bạn làm việc với luồng.
Luồng sẽ quan trọng hơn nhiều khi bạn bắt đầu học C ++.
Thư viện C cung cấp các chức năng để đọc và ghi vào hoặc từ các luồng dữ liệu, vì vậy bạn có thể sử dụng các chức năng đầu ra
đầu vào giống nhau để đọc và ghi bất kỳ thiết bị bên ngoài nào được ánh xạ tới một luồng.
Vì vậy, đó là lý do tại sao tôi đã đề cập rằng bạn có thể sử dụng quét F để đọc từ bàn phím.
Bạn cũng có thể sử dụng quét F để đọc từ các tệp.
Tất cả phụ thuộc vào những gì đầu vào, nơi mà luồng đang trỏ đến.
Và do đó, các chức năng rất, rất hữu ích và rất, rất linh hoạt để thực hiện điều này.
Vì vậy, đây chỉ là một cái nhìn tổng quan ở cấp độ cao về tệp là gì và tại sao chúng ta sử dụng nó, cách nó là dữ liệu
liên tục, nó là bộ nhớ không thay đổi.
Nó vẫn tồn tại, chúng ta sẽ sử dụng nó và chúng ta sẽ sử dụng tệp tiêu đề IO tiêu chuẩn để đọc và ghi vào nó
khi chúng ta cần lưu trữ dữ liệu cho chương trình của mình và các chương trình của chúng ta cuối cùng sẽ mạnh mẽ hơn rất
nhiều, a hữu ích hơn rất nhiều, linh hoạt hơn rất nhiều.
Vì vậy, trong bài giảng tiếp theo của chúng ta, chúng ta sẽ nói về việc triển khai thực tế điều này bằng cách sử dụng các hàm trong
tiêu đề IO tiêu chuẩn.
Cảm ơn bạn.