SPEAKER: Cho đến nay, nó có khả năng mà hầu hết các chương trình của bạn có được một chút phù du. Bạn chạy một chương trình như Mario hay tham lam. Nó làm điều gì đó, nó có thể nhắc nhở người sử dụng đối với một số thông tin, in một số đầu ra cho màn hình, nhưng sau đó khi chương trình của bạn đã kết thúc, có thực sự không có bằng chứng nó đã từng chạy ở nơi đầu tiên. Ý tôi là, chắc chắn, bạn có thể đã rời nó mở trong cửa sổ thiết bị đầu cuối, nhưng nếu bạn xóa màn hình của bạn, có thực sự không có bằng chứng rằng nó tồn tại. Chúng tôi không có một phương tiện lưu trữ thông tin liên tục, thông tin mà tồn tại sau khi chúng tôi chương trình đã ngừng hoạt động, hoặc chúng ta không có được đến thời điểm này. May mắn thay, mặc dù c làm cung cấp cho chúng tôi với khả năng để làm điều này bằng cách thực hiện một cái gì đó gọi là một tập tin, một cấu trúc mà về cơ bản đại diện cho một tập tin mà bạn sẽ tăng gấp đôi bấm vào máy tính của bạn, nếu bạn sử dụng một môi trường người dùng đồ họa. Nói chung khi làm việc với c, chúng tôi thực sự sẽ được làm việc với con trỏ đến tập tin stars-- files-- ngoại trừ một chút khi chúng ta nói về một cặp vợ chồng các chức năng mà làm việc với các tập tin con trỏ. Bạn không cần phải có sự đào quá sâu vào con trỏ hiểu biết bản thân. Có một chút teeny nhỏ nơi mà chúng tôi sẽ nói về họ, nhưng nói chung là tập con trỏ và con trỏ, trong khi quan hệ với nhau, là không chính xác những điều tương tự. Bây giờ tôi có ý nghĩa gì khi Tôi nói dữ liệu bền vững? Dữ liệu bền vững là gì? Tại sao chúng ta quan tâm đến nó? Nói, ví dụ, rằng bạn đang chạy một chương trình hoặc bạn đã viết lại một chương trình đó là một trò chơi, và bạn muốn theo dõi của tất cả các chuyển động của người dùng vì vậy mà có lẽ nếu có điều gì sai, bạn có thể xem các tập tin sau trận đấu. Đó là những gì chúng tôi có nghĩa là khi chúng ta nói về dữ liệu liên tục. Trong quá trình chạy của bạn chương trình, một tập tin được tạo ra. Và khi chương trình của bạn đã ngừng hoạt động, tập tin đó vẫn còn tồn tại trên hệ thống của bạn. Và chúng ta có thể nhìn vào nó và kiểm tra nó. Và do đó, chương trình sẽ được thiết lập để đã tạo ra một số dữ liệu liên tục, dữ liệu tồn tại sau khi chương trình đã chạy xong. Bây giờ tất cả những chức năng mà làm việc với việc tạo ra các tập tin và thao tác chúng theo nhiều cách khác nhau sống trong io.h tiêu chuẩn, mà là một tập tin tiêu đề bạn đã có thể được cân bao gồm cả ở đầu khá nhiều tất cả các chương trình của bạn bởi vì nó có chứa một trong những hầu hết các chức năng hữu ích cho chúng ta, printf, mà còn cho phép sống trong io.h. chuẩn Vì vậy, bạn không cần phải nhốt bao gồm bất kỳ tập tin bổ sung có thể để làm việc với các tập tin con trỏ. Bây giờ mỗi chức năng con trỏ tập tin duy nhất, hoặc mỗi tập tin duy nhất I / O, đầu ra đầu vào chức năng, chấp nhận như là một các thông số đầu vào của nó hay một pointer-- tập tin ngoại trừ cho một, fopen, mà là những gì bạn sử dụng để có được các tập tin con trỏ ở nơi đầu tiên. Nhưng sau khi bạn đã mở nộp và bạn nhận được tập tin con trỏ, sau đó bạn có thể vượt qua chúng như đối số cho các chức năng khác nhau chúng ta sẽ nói về ngày hôm nay, cũng như nhiều người khác để bạn có thể làm việc với các tập tin. Vì vậy, có sáu khá những cái cơ bản chung rằng chúng ta sẽ nói đến hôm nay. fopen và đồng hành của nó Hàm fclose, fgetc và chức năng đồng hành của nó fputc, và fread và chức năng đồng hành của nó, fwrite. Vì vậy, hãy thẳng vào nó. fopen-- nó làm gì? Vâng, nó sẽ mở ra một tập tin và nó mang đến cho bạn một con trỏ tập tin vào nó, vì vậy mà sau đó bạn có thể sử dụng nộp con trỏ như một đối số với bất kỳ tập tin khác I / O chức năng. Điều quan trọng nhất nhớ với fopen được rằng sau khi bạn đã mở file hoặc thực hiện một cuộc gọi như một ở đây, bạn cần kiểm tra để đảm bảo mà con trỏ mà bạn đã trở lại không bằng null. Nếu bạn không theo dõi các video trên con trỏ, điều này có thể không có ý nghĩa. Nhưng nếu bạn cố gắng và tới đích thu hồi con trỏ null, chương trình của bạn có thể sẽ phải chịu đựng một phân đoạn [không nghe được]. Chúng tôi muốn đảm bảo rằng chúng tôi có một con trỏ trở lại hợp pháp. Phần lớn thời gian chúng tôi sẽ đã nhận được một con trỏ hợp pháp trở lại và nó sẽ không là một vấn đề. Vì vậy, làm thế nào để chúng tôi thực hiện một cuộc gọi đến fopen? Nó trông khá nhiều như thế này. Tập tin sao ptr-- ptr là một generic đặt tên cho tập tin pointer-- fopen và chúng tôi vượt qua trong hai điều, một tên tập tin và một hoạt động, chúng tôi muốn thực hiện. Vì vậy, chúng ta có thể có một cuộc gọi mà trông giống như this-- ptr sao tập 1 bằng fopen file1.txt. Và các hoạt động tôi đã chọn là r. Vậy điều gì làm bạn nghĩ rằng r là ở đây? Các loại của sự vật là những gì chúng tôi có thể có thể làm cho các tập tin? Vì vậy, r là các hoạt động mà chúng ta chọn khi chúng ta muốn đọc một tập tin. Vì vậy, chúng ta sẽ cơ bản khi chúng tôi thực hiện cuộc gọi như thế này nhận được bản thân mình một con trỏ tập tin như vậy mà sau đó chúng ta có thể đọc thông tin từ file1.txt. Tương tự như vậy, chúng ta có thể mở tập tin 2.txt cho văn bản và vì vậy chúng tôi có thể vượt qua ptr2, con trỏ tập tin tôi đã tạo ra ở đây, như một tham số để bất kỳ chức năng ghi thông tin vào một tập tin. Và tương tự như văn bản, có Cũng có tùy chọn để phụ thêm, một. Sự khác biệt giữa bằng văn bản và phụ thêm được rằng khi bạn viết thư cho một tập tin, nếu bạn thực hiện một cuộc gọi đến fopen cho văn bản và tập tin đã tồn tại, đó là sẽ ghi đè lên toàn bộ tập tin. Nó sẽ bắt đầu ngay từ đầu, xóa tất cả các thông tin đó là đã có. Trong khi đó nếu bạn mở nó để phụ thêm, nó sẽ đi đến tận cùng của tập tin nếu có đã được văn bản trong nó hoặc thông tin trong đó, và sau đó nó sẽ bắt đầu viết từ đó. Vì vậy, bạn sẽ không mất bất kỳ thông tin mà bạn đã làm trước đó. Cho dù bạn muốn viết hoặc gắn thêm loại phụ thuộc vào tình hình. Nhưng có thể bạn sẽ biết những gì hoạt động đúng là khi thời gian đến. Vì vậy, đó là fopen. Những gì về fclose? Vâng, khá đơn giản, fclose chỉ chấp nhận con trỏ tập tin. Và như bạn mong đợi, nó đóng tập tin đó. Và một khi chúng ta đã đóng một tập tin, chúng ta không thể thực hiện bất kỳ tập tin I / O chức năng, đọc hoặc viết, trên tập tin đó. Chúng ta phải mở lại nộp một thời điểm khác để để tiếp tục làm việc với nó sử dụng các chức năng I / O. Vì vậy, phương tiện fclose chúng tôi đang thực hiện làm việc với các tập tin này. Và tất cả chúng ta cần phải vượt qua trong là tên của một con trỏ tập tin. Vì vậy, trên một vài trang trình bày trước, chúng tôi fopened tập 1 dot văn bản để đọc và chúng tôi giao mà nộp con trỏ tới ptr1. Bây giờ chúng tôi đã quyết định chúng tôi thực hiện đọc từ tập tin đó. Chúng tôi không cần phải làm bất cứ hơn với nó. Chúng tôi có thể ptr1 chỉ fclose. Và tương tự, có thể chúng tôi fclose những người khác. Được rồi. Vì vậy, đó là mở cửa và đóng cửa. Đó là hai cơ bản bắt đầu hoạt động. Bây giờ chúng tôi muốn thực sự làm một số công cụ thú vị, và các chức năng đầu tiên mà chúng tôi sẽ thấy rằng sẽ làm điều đó là fgetc-- nộp được một nhân vật. Đó là những gì fgetc thường sẽ dịch cho. Mục tiêu của nó trong cuộc sống là để đọc các ký tự tiếp theo, hoặc nếu điều này là rất của bạn Cuộc gọi đầu tiên để fgetc cho một tập tin cụ thể, ký tự đầu tiên. Nhưng rồi sau đó, bạn sẽ có được một kế tiếp, các nhân vật rất tiếp theo của tập tin đó, và lưu trữ nó trong một biến nhân vật. Như chúng ta đã thực hiện ở đây, char ch bằng fgetc, vượt qua trong tên của một con trỏ tập tin. Một lần nữa, nó rất quan trọng ở đây để nhớ rằng để có hoạt động này thành công, con trỏ tập tin bản thân có lẽ đã được mở để đọc. Chúng tôi không thể đọc một ký tự từ một tập tin con trỏ mà chúng tôi đã mở cho văn bản. Vì vậy, đó là một trong những hạn chế của fopen, phải không? Chúng tôi phải hạn chế mình chỉ biểu diễn một hoạt động với một con trỏ tập tin. Nếu chúng ta muốn đọc và viết từ cùng một tập tin, chúng ta sẽ phải mở hai riêng biệt tập tin con trỏ đến file-- cùng một cho đọc, một cho văn bản. Vì vậy, một lần nữa, lý do duy nhất Tôi mang lại cho rằng ngay bây giờ là bởi vì nếu chúng ta thực hiện cuộc gọi để fgetc, rằng con trỏ tập tin chắc hẳn được mở để đọc. Và sau đó khá đơn giản, tất cả chúng ta cần phải làm là vượt qua trong tên của con trỏ file. Vì vậy, ch char bằng ptr1 fgetc. Điều đó sẽ được chúng tôi các character-- tiếp theo hoặc một lần nữa, nếu đây là lần đầu tiên Hiện chúng tôi đã thực hiện cuộc gọi này, các character-- đầu tiên của bất cứ điều gì tập tin được trỏ đến bởi ptr1. Nhớ lại rằng đó là tập 1 dot văn bản. Nó sẽ nhận được các ký tự đầu tiên của mà và chúng tôi sẽ lưu trữ nó trong ch biến. Khá dễ dàng. Vì vậy, chúng tôi đã chỉ nhìn vào ba chức năng và đã được chúng tôi có thể làm một cái gì đó khá gọn gàng. Vì vậy, nếu chúng ta mất khả năng này nhận được một nhân vật và chúng ta lặp it-- vì vậy chúng tôi tiếp tục nhận được ký tự từ một file trên và hơn và over-- bây giờ chúng tôi có thể đọc tất cả các đơn nhân vật của một tập tin. Và nếu chúng ta in ra mọi vật ngay lập tức sau khi chúng ta đọc nó, bây giờ chúng tôi đã đọc từ một tập tin và in nội dung của nó vào màn hình. Chúng tôi đã nối hiệu quả tập tin đó trên màn hình. Và đó là những gì Linux lệnh mèo nào. Nếu bạn gõ mèo trong tên tập tin, nó sẽ in ra toàn bộ nội dung của các tập tin trong cửa sổ thiết bị đầu cuối của bạn. Và như vậy vòng lặp này ít ở đây, chỉ có ba dòng mã, nhưng nó có hiệu quả nhân đôi lệnh cat Linux. Vì vậy, điều này có thể cú pháp nhìn một chút lạ, nhưng đây là những gì đang xảy ra ở đây. Trong khi ch bằng fgetc, ptr không phải là bằng EOF-- đó là cả một ngụm, nhưng chúng ta hãy phá vỡ nó xuống chỉ do đó, nó là rõ ràng về cú pháp. Tôi đã củng cố nó vì lợi ích của không gian, mặc dù nó là một chút cú pháp phức tạp. Vì vậy, phần này trong xanh ngay Hiện tại, những gì là nó đang làm gì? Vâng, đó chỉ là cuộc gọi fgetc của chúng tôi, phải không? Chúng tôi đã nhìn thấy rằng trước. Nó có được một nhân vật từ các tập tin. Sau đó, chúng ta so sánh rằng nhân vật chống lại EOF. EOF là một giá trị đặc biệt đó là quy định tại io.h tiêu chuẩn, mà là kết thúc của nhân vật tập tin. Vì vậy, về cơ bản những gì sẽ xảy ra được lặp này sẽ đọc một ký tự, so sánh nó với EOF, các kết thúc của nhân vật tập tin. Nếu họ không phù hợp, vì vậy chúng tôi có không đạt đến kết thúc của tập tin, chúng tôi sẽ in ra ký tự đó. Sau đó chúng tôi sẽ quay trở lại bắt đầu của vòng lặp lại. Chúng tôi sẽ có được một nhân vật, kiểm tra chống lại EOF, in ra, và như vậy và như vậy và như vậy, Looping qua theo cách đó cho đến khi chúng tôi đã đạt đến cuối của tập tin. Và sau đó bởi thời điểm đó, chúng tôi sẽ có in ra toàn bộ nội dung của tập tin. Vì vậy, một lần nữa, chúng tôi đã chỉ nhìn thấy fopen, fclose, và fgetc và đã được chúng ta có thể nhân đôi một lệnh Linux terminal. Như tôi đã nói ở đầu, chúng tôi đã có fgetc và fputc, và fputc là bạn đồng hành chức năng của fgetc. Và như vậy, như bạn có thể tưởng tượng, nó là các văn bản tương đương. Nó cho phép chúng ta viết nhân vật duy nhất vào một tập tin. Một lần nữa, sự báo trước được, chỉ như nó là các fgetc, các tập tin rằng chúng tôi đang viết để chắc hẳn được mở ra cho văn bản hoặc cho phụ thêm. Nếu chúng ta cố gắng và sử dụng fputc vào một tập tin mà chúng tôi đã mở để đọc, chúng ta sẽ phải chịu đựng một chút của một sai lầm. Nhưng các cuộc gọi là khá đơn giản. vốn fputc A ptr2, tất cả đó là sẽ làm là nó sẽ viết thư vào A vào tập tin 2 dot văn bản, mà là tên của tập tin mà chúng tôi đã mở và giao con trỏ đến ptr2. Vì vậy, chúng ta sẽ viết vốn A nộp 2 dot văn bản. Và chúng ta sẽ viết một dấu chấm than chỉ nộp 3 dot văn bản, mà đã được trỏ đến bởi ptr3. Vì vậy, một lần nữa, khá đơn giản ở đây. Nhưng bây giờ chúng ta có thể làm một chuyện khác. Chúng tôi có ví dụ này chúng tôi chỉ đi qua về việc có thể để nhân rộng các con mèo Linux lệnh, một trong đó in ra vào màn hình. Vâng, bây giờ mà chúng tôi có khả năng đọc các ký tự từ các tập tin và viết các ký tự vào các tập tin, tại sao chúng ta không chỉ cần thay thế đó gọi printf với một cuộc gọi đến fputc. Và bây giờ chúng tôi đã nhân đôi cp, một lệnh Linux cơ bản mà chúng ta đã nói về chặng đường dài trước đây trong Linux lệnh video. Chúng tôi đã có hiệu quả nhân đôi mà ngay tại đây. Chúng tôi đang đọc một nhân vật và sau đó chúng tôi viết rằng nhân vật đến một file khác. Đọc từ một tập tin, văn bản khác, hơn và hơn và hơn nữa cho đến khi chúng ta nhấn EOF. Chúng ta phải kết thúc nộp, chúng tôi đang cố gắng để sao chép từ. Và bằng cách đó chúng tôi sẽ có văn bản tất cả của các nhân vật chúng ta cần phải tập tin mà chúng tôi muốn gửi đến. Vì vậy, đây là cp, các lệnh sao chép Linux. Vào lúc bắt đầu của video này, tôi đã có sự báo trước rằng chúng ta sẽ nói chuyện một chút chút về con trỏ. Dưới đây là cụ thể mà chúng tôi sẽ nói về con trỏ thêm vào tập tin con trỏ. Vì vậy, chức năng này có vẻ loại đáng sợ. Nó có một vài thông số. Có rất nhiều xảy ra ở đây. Có rất nhiều khác nhau màu sắc và văn bản. Nhưng thực sự, nó chỉ là phiên bản chung của fgetc cho phép chúng tôi để có được bất kỳ lượng thông tin. Nó có thể là một chút không hiệu quả nếu chúng tôi nhận các ký tự cùng một lúc, lặp lại thông qua các tập tin một ký tự tại một thời điểm. Nó sẽ không thể đẹp hơn để có được 100 tại một thời điểm hoặc 500 tại một thời điểm? Vâng, fread và chức năng đồng hành của nó fwrite, mà chúng tôi sẽ nói về trong một giây, cho phép chúng tôi làm việc đó. Chúng ta có thể đọc một số lượng tùy ý các thông tin từ một tập tin và chúng ta lưu trữ nó ở đâu đó tạm thời. Thay vào đó là có thể chỉ phù hợp với nó trong một biến duy nhất, chúng ta có thể cần phải lưu trữ nó trong một mảng. Và như vậy, chúng tôi vượt qua trong bốn lập luận để fread-- một con trỏ đến vị trí mà chúng tôi đi để lưu trữ thông tin, lớn như thế nào mỗi đơn vị thông tin sẽ có bao nhiêu đơn vị thông tin chúng tôi muốn có được, và từ tập tin đó, chúng tôi muốn có được chúng. Có lẽ tốt nhất minh họa với một ví dụ ở đây. Vì vậy, chúng ta hãy nói rằng chúng ta khai báo một mảng 10 số nguyên. Chúng tôi đã chỉ cần khai báo trên ngăn xếp tùy tiện int arr 10. Vì vậy, đó là khá đơn giản. Bây giờ những gì chúng tôi đang làm dù là frecall là chúng ta đang đọc kích thước của int lần 10 byte thông tin. Kích thước của int phúc four-- đó kích thước của một số nguyên trong c. Vì vậy, những gì chúng tôi đang làm là chúng ta đang đọc 40 byte giá trị của thông tin từ tập tin trỏ đến bởi ptr. Và chúng tôi đang lưu trữ những 40 byte một nơi nào đó nơi mà chúng tôi đã đặt sang một bên 40 byte giá trị của bộ nhớ. May mắn thay, chúng tôi đã làm điều đó bằng cách tuyên bố arr, mảng mà ngay tại đó. Đó là khả năng nắm giữ 10 đơn vị bốn byte. Vì vậy, trong tổng số, nó có thể chứa 40 byte giá trị của thông tin. Và bây giờ chúng ta đang đọc 40 byte thông tin từ các tập tin, và chúng tôi đang lưu trữ nó trong arr. Nhớ lại từ video trên con trỏ đó tên của một mảng, chẳng hạn như arr, thực sự chỉ là một con trỏ đến phần tử đầu tiên của nó. Vì vậy, khi chúng tôi vượt qua trong arr đó, chúng tôi là, trên thực tế, đi qua trong một con trỏ. Tương tự như vậy chúng ta có thể làm this-- chúng tôi không nhất thiết phải cần phải lưu đệm của chúng tôi trên stack. Chúng tôi cũng có thể tự động phân bổ một bộ đệm như thế này, sử dụng malloc. Hãy nhớ rằng, khi chúng ta tự động phân bổ bộ nhớ, chúng tôi đang tiết kiệm nó trên đống, không stack. Nhưng nó vẫn là một bộ đệm. Nó vẫn còn, trong trường hợp này, là giữ 640 byte thông tin vì một đôi chiếm tám byte. Và chúng tôi đang yêu cầu 80 người trong số họ. Chúng tôi muốn có không gian giữ 80 đôi. Vì vậy, 80 lần 8 là 640 byte thông tin. Và đó gọi là fread thu 640 byte thông tin từ tập tin trỏ đến bởi ptr và lưu trữ nó bây giờ trong arr2. Bây giờ chúng ta cũng có thể điều trị fread giống như một cuộc gọi đến fgetc. Trong trường hợp này, chúng tôi chỉ cố gắng có được một ký tự từ tập tin. Và chúng ta không cần một mảng để chứa một ký tự. Chúng tôi chỉ có thể lưu trữ nó trong một biến ký tự. Việc nắm bắt, mặc dù, là khi chúng ta chỉ có một biến, chúng ta cần phải vượt qua trong địa chỉ của biến đó vì nhớ lại rằng số đầu tiên cho fread là một con trỏ đến vị trí và bộ nhớ nơi mà chúng ta muốn lưu trữ các thông tin. Một lần nữa, tên của một Mảng là một con trỏ. Vì vậy, chúng ta không cần phải làm mảng ký hiệu. Nhưng c, nhân vật c ở đây, không phải là một mảng. Nó chỉ là một biến. Và vì vậy chúng tôi cần phải vượt qua một dấu và c để cho biết rằng đó là địa chỉ mà chúng tôi muốn để lưu trữ này một byte của thông tin, một nhân vật này mà chúng tôi đang thu thập từ ptr. Fwrite-- Tôi sẽ đi qua hơn này một chút quickly-- là khá nhiều tương đương chính xác của fread ngoại trừ nó cho văn bản thay vì đọc sách, chỉ như other-- chúng tôi đã mở và gần gũi, có được một nhân vật, viết một nhân vật. Bây giờ nó có được tùy tiện lượng thông tin, số lượng tùy ý bên phải của thông tin. Vì vậy, giống như trước đây, chúng ta có thể có một mảng các số nguyên 10 nơi mà chúng tôi đã có thông tin được lưu trữ, có lẽ. Đó có lẽ là một số dòng mã mà nên đi giữa hai nơi tôi điền arr với một cái gì đó có ý nghĩa. Tôi điền vào nó với 10 số nguyên khác nhau. Và thay vào đó, những gì tôi làm là viết từ arr và thu thập các thông tin từ arr. Và tôi lấy thông tin và đưa nó vào các tập tin. Vì vậy, thay vì nó là từ các tập tin vào bộ đệm, chúng ta bây giờ đi từ bộ đệm để các tập tin. Vì vậy, nó chỉ là sự đảo ngược. Vì vậy, một lần nữa, giống như trước đây, chúng ta có thể cũng có một đoạn đống bộ nhớ rằng chúng tôi đã động phân bổ và đọc từ đó và viết rằng vào tập tin. Và chúng tôi cũng có một biến duy nhất khả năng nắm giữ một byte thông tin, chẳng hạn như một nhân vật. Nhưng một lần nữa, chúng ta cần phải vượt qua trong địa chỉ của biến đó khi chúng ta muốn đọc từ nó. Vì vậy, chúng ta có thể ghi thông tin chúng ta tìm thấy tại địa chỉ đó để con trỏ tập tin, ptr. Có rất nhiều khác tập tin lớn I / O chức năng mà làm những việc khác nhau bên cạnh những người chúng tôi đã nói chuyện về ngày hôm nay. Một cặp vợ chồng của những người thân bạn có thể tìm thấy hữu ích là fgets và fputs, đó là tương đương của fgetc và fputc nhưng cho đọc một chuỗi duy nhất từ ​​một tập tin. Thay vì một nhân vật duy nhất, nó sẽ đọc toàn bộ một chuỗi. fprintf, mà về cơ bản cho phép bạn sử dụng printf để ghi vào tập tin. Vì vậy, cũng giống như bạn có thể làm thay thế các biến sử dụng i placeholders phần trăm và phần trăm d, và như vậy, với printf bạn tương tự như vậy có thể lấy chuỗi printf và in một cái gì đó như thế vào một tập tin. fseek-- nếu bạn có một máy nghe nhạc DVD là sự tương tự tôi thường sử dụng here-- là loại giống như cách sử dụng của bạn tua lại và nhanh chóng chuyển tiếp nút để di chuyển xung quanh bộ phim. Tương tự như vậy, bạn có thể di chuyển xung quanh các tập tin. Một trong những điều bên trong rằng cấu trúc file c tạo ra cho bạn là một chỉ số bạn đang ở đâu trong file. Bạn có ở rất bắt đầu, tại byte số không? Bạn có ở byte 100, byte 1000, và như vậy? Bạn có thể sử dụng tùy tiện di chuyển để fseek mà chỉ về phía trước hoặc phía sau. Và ftell, một lần nữa tương tự như một máy nghe nhạc DVD, giống như một chiếc đồng hồ nhỏ mà nói bạn có bao nhiêu phút và giây bạn đang vào một bộ phim cụ thể. Tương tự như vậy, ftell cho bạn biết nhiều byte bạn đang vào tập tin. feof là một phiên bản khác nhau phát hiện cho dù bạn đã đạt đến kết thúc của tập tin. Và ferror là một chức năng mà bạn có thể sử dụng để phát hiện xem một cái gì đó có đi sai làm việc với một tập tin. Một lần nữa, điều này chỉ là trầy xước bề mặt. Vẫn còn rất nhiều tập tin hơn I / O chức năng trong io.h. chuẩn Nhưng điều này có thể sẽ giúp bạn bắt đầu làm việc với các tập tin con trỏ. Tôi Doug Lloyd. Đây là CS50.