스피커 : 지금까지, 그것은 가능성이 높습니다 프로그램의 대부분이 조금 임시왔다. 당신은 마리오이나 욕심 같은 프로그램을 실행합니다. 그것은 어쩌면하라는 메시지를, 무언가를 일부 정보는 사용자, 화면에 약간의 출력을 인쇄, 그러나 다음 프로그램은 이상 때 이 증거는 정말 없다 그것은 이제까지 처음에 실행되었습니다. 나는 확실히 당신이 왼쪽 수도, 의미 그것은, 터미널 창에서 열립니다 당신은 당신의 화면을 취소하는 경우 그러나, 거기에 그것이 존재 정말 증거합니다. 우리는 저장 수단을 갖고 있지 않은 지속적인 정보, 그것은 우리 후 존재 프로그램 실행이 중지되었습니다, 또는 우리는이 시점까지하지 않았습니다. 다행히도하지만, C는 않습니다 수있는 능력을 우리에게 제공 구현하여이 작업을 수행하는 무엇인가라는 파일 구조가 기본적으로 당신은 두 번 할 파일을 나타냅니다 당신이 있다면, 당신의 컴퓨터를 클릭 그래픽 사용자 환경에 사용된다. 일반적으로 작업을 할 때 C로, 우리는 실제로있어 작업 할 것 포인터는 파일을 files--합니다 .2 명의 스타 조금 제외 우리는 몇 가지에 대해 이야기 할 때 기능의 파일 포인터와 함께 작동합니다. 당신은 정말 파고있다 할 필요가 없습니다 이해 포인터에 너무 깊이 자신. 작은 조그마한 비트가있다 우리가 그들에 대해 이야기 곳, 그러나 일반적으로 포인터를 제출하고 포인터, 상호 동안, 정확히 같은 것이 아니다. 지금은 때 무엇을 의미합니까 나는 영구 데이터를 말한다? 영구 데이터는 무엇입니까? 우리는 그것에 대해 왜 상관이야? 것으로, 예를 들면, 말 당신은 프로그램을 실행하는 또는 당신이 다시 한 게임의 프로그램, 당신은 트랙을 유지하려면 사용자의 움직임의 모든 그래서 뭔가 잘못 어쩌면 경우, 당신은 게임 후 파일을 검토 할 수 있습니다. 그 때 우리가 무엇을 의미하는지에 관해이다 영구 데이터에 대해 이야기. 실행 과정에서 당신의 프로그램은 파일이 만들어집니다. 그리고 때 프로그램 실행 중지, 해당 파일은 여전히​​ 시스템에 존재합니다. 그리고 우리는 그것을보고를 검사 할 수 있습니다. 그리고 그 프로그램은로 설정됩니다 일부 영구 데이터를 만들었습니다, 데이터는 프로그램 후 존재 실행이 완료. 이제 작업이 모든 기능 파일을 생성하고 조작과 를 다양한 방식으로 표준 io.h에 살고, 이는 헤더 파일입니다 당신은 가능성이 파운드 봤는데 꽤 상단에 포함 프로그램의 많은 모든 이 중 하나를 포함하고 있기 때문에 우리에게 가장 유용한 기능, 또한 수의 printf, 표준 io.h.에 살고 그래서 당신은 포함 파운드 할 필요가 없습니다 추가 파일 아마 위해 파일 포인터와 함께 작동합니다. 이제 모든 단일 파일 포인터 기능, 또는 매 파일 I / O, 입출력 함수는, 하나로서 받아 들인다 매개 변수 또는 입력 제외 파일 pointer-- 하나, fopen을, 어떤 파일을 얻기 위해 사용하는 것입니다 처음에 포인터. 하지만 연 후 파일과이 파일 포인터를 얻을, 당신은 다음과 같이 전달할 수 있습니다 다양한 기능에 인수 우리에 대해 이야기하는거야 오늘날,뿐만 아니라 많은 다른 있도록 파일로 작업 할 수 있습니다. 그래서 여섯 꽤있다 공통 기본 것들 우리는 오늘에 대해 이야기 할 거라고. 하면 fopen과 그 동반자 기능 FCLOSE,는 fgetc 그 동반자 함수 fputc, 그리고 FREAD과 동반자 기능, 에 fwrite. 그럼 바로 들어갈 수 있습니다. fopen-- 어떤 역할을합니까? 음, 파일을 열고 그것을 그것은 당신에게 파일 포인터를 제공, 그래서 당신은 그 사용할 수있는 인자로 포인터를 파일 다른 파일 I / O 기능을 어느. 가장 중요한 것 fopen을 함께 기억 당신이 연 것을 후 파일 또는 여기에 같은 전화를했다, 당신은 확인하기 위해 확인해야 당신이 돌아 왔을 포인터 null로 동일하지 않다. 당신은 비디오로 시청하지 않은 경우 포인터,이 이해가되지 않을 수 있습니다. 하지만 당신은 시도하고 역 참조하는 경우 널 포인터 리콜, 프로그램은 아마 겪게됩니다 분할 [들림]. 우리는 있는지 확인하려면 우리 합법적 인 포인터를 다시 얻었다. 시간의 대부분 우리 것 다시 합법적 인 포인터를 입수했습니다 그것은 문제가되지 않습니다. 그래서 우리는 어떻게 호출 fopen의 할 수 있을까요? 그것은이 같은 꽤 많이 보인다. 일반 인 ptr에 ptr-- 파일 스타 pointer--하면 fopen 파일 이름 우리는 두 가지의 파일 이름을 전달 그리고 작업은 우리가 수행 할. 그래서 우리는 보이는 전화를 할 수도 있습니다 이 항아리 파일 스타 PTR 1 fopen을 동일 은 File2.txt. 내가 선택한 작업은 R이다. 그래서 당신은 무엇을, R은 여기에있다 생각하십니까? 물건의 종류 무엇 우리 파일을 할 수있을 것인가? 따라서 R이 동작은 그 우리 우리가 파일을 읽을하고자 할 때 선택합니다. 그래서 우리는 기본적으로 때 것 우리는이 같은 전화를 걸 자신에게 파일 포인터를 받고있을 우리는 다음의 정보를 읽을 수 있도록 은 File2.txt에서. 마찬가지로, 우리는 파일 2.txt을 열 수 있습니다 PTR2 쓰기 때문에 우리가 통과 할 수있다, 내가 여기에 생성 한 파일 포인터, 어떤 함수에 인수로 그 파일에 정보를 기록합니다. 쓰기와 마찬가지로, 거기에 또한 옵션이 추가됩니다. 차이점 쓰기 추가 인 당신이 파일에 쓸 때, 당신은 쓰기 위해 fopen의로 전화를 걸 경우 그 파일이 이미 그것의 존재 전체 파일을 덮어 쓸 것. 그것은 시작하는거야 처음에, 모든 정보를 삭제 즉, 이미있다. 당신이 추가 그것을 열면 반면, 파일의 마지막으로 이동한다 이미 텍스트가 있다면 그것 또는 정보, 그리고 그 다음에 시작됩니다 거기에서 작성. 그래서 당신은 어떤을 잃지 않을 것 당신이 전에했던 정보. 당신이 작성하거나 추가 할 것인지 종류의 상황에 따라 달라집니다. 하지만 당신은 아마 무엇을 알 수 있습니다 때가되면 오른쪽 조작이다. 그래서 fopen을합니다. 무엇 FCLOSE 어떻습니까? 음, 아주 간단하게, FCLOSE 그냥 파일 포인터를 받아들입니다. 그리고 예상대로, 그것은 그 파일을 닫습니다. 우리가 파일을 닫은 후, 우리는 할 수 없습니다 더이상 파일 I / O 기능을 수행 읽거나 해당 파일에 쓰기. 우리는 다시 열 필요가 위해 다른 시간을 파일 작업을 계속합니다 그것은 I / O 함수들을 사용. 우리가 완료 그래서 FCLOSE 수단 이 파일로 작업. 그리고 우리가 통과 할 필요가있다 파일 포인터의 이름. 부부는 전에 슬라이드에 그래서, 우리 읽기 fopened 파일 1 점 텍스트 우리는 할당 PTR1에 포인터를 파일. 이제 우리는 우리가있어 결정했습니다 해당 파일에서 읽기 다. 우리는 그것으로 더 이상 할 필요가 없습니다. 우리는 단지 FCLOSE PTR1을 할 수 있습니다. 그리고 마찬가지로, 우리는 할 수 다른 사람을 FCLOSE. 괜찮아. 그래서 열고 닫는입니다. 이들은 두 염기성 작업을 시작. 이제 우리는 실제로 원하는 몇 가지 흥미로운 물건을, 그리고 첫 번째 함수는 우리거야 즉 fgetc--하다 할 것 참조 문자를 얻을 파일. 즉, 일반적으로는 fgetc 무엇 번역 할 것이다. 인생에서의 목표는이다 다음 문자를 읽고, 또는이 당신의 아주 인 경우 는 fgetc에 첫 번째 호출 특정 파일에 대해, 첫 번째 문자. 그러나 그 후, 당신은 다음 하나를 얻을 해당 파일의 바로 다음 문자, 문자 변수에 저장을. 우리가 여기에서 수행 한 바와 같이, 숯불 채널은,는 fgetc와 동일 파일 포인터의 이름으로 전달합니다. 다시, 그것은 매우있어 기억 여기에 중요 위해 것은이하는 것을 이 조작이 실패, 파일 포인터 자체 한게 분명해 읽기 열렸다. 우리는 파일에서 문자를 읽을 수 없습니다 우리가 쓰기 위해 열 포인터. 그래서 그 중 하나 하면 fopen의 한계, 맞죠? 우리는 제한해야 자신 만 수행하기 하나의 파일 포인터를 하나의 작업. 우리가 읽고 싶어하는 경우와 같은 파일에서 쓰기, 우리는 열려있는 두 개의있을 것입니다 같은 file--에 파일 포인터 독서를위한 하나, 쓰기 하나. 그래서 다시, 유일한 이유 나는 지금 그를 불러 우리가 전화를 만들려고하는 경우 때문에 는 fgetc에 해당 파일 포인터 꺼리 읽기 열렸다. 그리고 아주 간단하게, 우리 모두가해야 할 파일 포인터의 이름을 전달합니다. 그래서 문자 채널이는 fgetc PTR1 같습니다. 즉 우리를 얻을 것 다음 character-- 또는 다시 이것은 제이면 우리는이 전화를했습니다 시간, 의 첫 번째 character-- 어떤 파일은 PTR1에 의해 지적되고있다. 즉 파일 1 점 텍스트임을 기억하자. 그것은 그것의 첫 번째 문자를 얻을 수 있습니다 우리는 변수 채널에 저장합니다. 꽤 간단합니다. 그래서 우리는 세 가지 검토 한 기능과 우리 이미 멋지다 뭔가를 할 수 있습니다. 우리가이 능력을 가지고 있다면 문자를 점점 우리는 루프 그래서 그건 ... 우리 문자가 계속 파일의 이상과 이상과 끝났다, 이제 우리 하나 하나를 읽을 수 있습니다 파일의 문자. 그리고 우리는 모든 문자를 인쇄하면 우리는 그것을 읽을 직후, 우리는 지금 파일에서 읽은과 화면에 그 내용을 인쇄했다. 우리는 효과적으로 연결될 것 화면에 해당 파일. 그리고 그 무엇 리눅스 명령 고양이는 않습니다. 파일 이름의 고양이를 입력하면, 그것을 전체 내용을 인쇄 할 터미널 창에서 파일의. 그리고 여기이 작은 루프, 코드의 세 줄, 그러나 효과적으로 복제 리눅스 명령 고양이. 따라서이 구문은 수도 조금 이상한 모양 하지만 여기에 여기에 무슨 일이 일어나고 있는지입니다. 채널이는 fgetc와 동일하지만, PTR은 아니다 그것은 전체 입의 EOF-- 같 하지만 현실을 바로 분해하자 그래서 구문에 분명하다. 나는 그것을 통합했습니다 공간을 위해, 그것은 조금 비록 구문 까다로운. 그래서 녹색 바로이 부​​분 지금은 무엇을하고 있는가? 글쎄, 그건 단지 우리는 fgetc 호출, 오른쪽입니까? 우리는 이전 것을 보았다. 그것은 하나를 얻는 것 파일에서 문자. 그런 다음 우리는 비교 EOF에 대한 문자. EOF입니다 특수 값입니다 표준 io.h에 정의 된 파일의 마지막 문자이다. 그래서 기본적으로 무슨 일이 일어날 이 루프는 문자를 읽을 수있다, ,를를 끝까지 비교 파일 문자의 끝. 일치하지 않으면, 우리는 가지고 있지 파일의 끝에 도달 우리는 문자를 인쇄 할 수 있습니다. 그 다음 우리는 다시 갈거야 다시 루프의 시작. 우리는 문자를 얻을 것이다 확인 EOF에 대해, 그래서 그것을 밖으로 인쇄하고, 등 등, 그런 식으로 통해 반복 우리는 파일의 끝에 도달 할 때까지. 그리고 그 점, 우리는 인쇄 한 것 파일의 전체 내용 알아. 그래서 다시, 우리는 보았다 하면 fopen, FCLOSE하고는 fgetc 이미 우리는 복제 할 수 있습니다 리눅스 터미​​널 명령. 내가 처음에 말했듯이, 우리는 fgetc와 fputc를했다, 와 fputc는 동반자였다 는 fgetc의 기능. 그리고, 같이 당신은, 상상 이 기록에 해당합니다. 그것은 우리를 작성할 수 있습니다 파일에 하나의 문자. 다시 말하지만,주의해야 할 점은되고, 단지 이는 fgetc와처럼, 파일 우리가 꺼리로 작성하는 것이되어 쓰기 또는 추가를 위해 열었다. 우리는 시도하고 파일에 fputc 사용하는 경우 우리가 읽기를 위해 연 것을, 우리는 고통을거야 실수의 비트. 그러나 호출은 매우 간단하다. fputc 자본 PTR2, 모든 그 할 것 그건입니다 편지 쓰기 것 파일에 2 도트로 의 이름이었다 텍스트, 우리가 열고 할당 된 해당 파일 포인터가 PTR2합니다. 그래서 우리는 쓰기거야 자본은 2 점 텍스트 파일입니다. 그리고 우리는 느낌표를 쓸 것이다 3 점 파일을 가리 PTR3에 의해 지시 된 텍스트,. 그래서 다시, 여기에 매우 간단. 하지만 지금 우리는 또 다른 일을 할 수 있습니다. 우리는이 예를 우리는 그냥 가고 있었다 고양이를 복제 할 수있는 약 리눅스 명령, 출력합니다 하나 화면. 자, 이제 우리는 능력을 가지고 있음 파일에서 문자를 읽을 수 그리고, 파일에 문자를 쓰기 왜 우리는 단지를 대체하지 않습니다 fputc하는 호출의 printf 호출합니다. 그리고 지금 우리는 CP를 복제 한, 아주 기본적인 리눅스 명령 우리는 방법에 대한 긴 이야기 그 전 리눅스에서 비디오를 명령한다. 우리는 효과적으로했습니다 바로 여기에 있음을 중복. 우리는 문자를 읽고, 그리고, 우리는있어 다른 파일에 그 문자를 작성. 하나의 파일에서 읽기, 쓰기 반복해서 다른,에 또 다시 우리는 EOF 칠 때까지. 우리는의 끝에있어 파일 우리는 복사하려는. 그리고 그게 우리 모두 기록해야합니다 문자 우리는 파일에 필요 우리가 작성하는 그. 그래서이 CP, 리눅스 복사 명령입니다. 의 시작에서 이 비디오, 내가 경고했다 우리는 이야기 것 포인터에 대해 조금. 우린 어디 여기에 특별히입니다 포인터에 대해 이야기 할 것 뿐만 아니라 포인터를 파일로. 따라서이 기능은 종류의 무서운 보인다. 그것은 몇 가지 매개 변수를 가지고있다. 여기서 살펴 봐야 할 것들이 많다. 다른 많은있다 색상과 텍스트. 하지만 실제로는, 그냥있어 는 fgetc의 일반 버전 즉, 우리가 하나를 얻을 수 있습니다 정보의 양. 그것은 우리가 있다면 조금 비효율적 일 수있다 한 번에 문자 하나를 받고, 파일을 반복 한번에 한 문자. 그것을 얻기 위해 더 좋은하지 않을까요 한번에 500 시간 또는 100? 음, FREAD과 동반자 기능 에 fwrite, 우리는을 얘기하자 두 번째로, 우리는 그냥 할 수 있습니다. 우리는 임의의 금액을 읽을 수 있습니다 파일에서 정보의 우리는 어딘가에 일시적으로 저장합니다. 대신 할 수있는의 하나의 변수에 맞게, 우리는 배열에 저장해야 할 수도 있습니다. 그래서, 우리는 네 전달 인수는 포인터 fread-- 할 우리가있어 위치 정보를 저장하는 것, 어떻게 정보의 각 단위 큰 될 것입니다, 정보의 얼마나 많은 단위 우리는 취득을 원하고,에서 어떤 파일을 우리가 그들을 싶어. 아마 가장 좋은 도시 여기에 예를 들어와. 그래서 우리가 선언한다고 가정 해 봅시다 10 정수의 배열. 우리는 단지 선언했습니다 임의 스택 도착 (10)를 int로. 그래서 매우 간단합니다. 지금 우리가 생각하고있는 것은 frecall 우리는 INT의 크기를 읽고있다 시간 정보의 10 바이트. INT의 존재의 크기 그건 four-- C에서 정수의 크기입니다. 그래서 우리가하고있는 것은 우리가 읽고있는 것입니다 정보의 가치가 40 바이트 파일에서 pt​​r이 지적했다. 그리고 우리는 그 저장하고 40 바이트 어딘가에 우리는 따로 설정 한 경우 메모리의 가치가 40 바이트. 다행히도, 우리는 이미에 의해 그 일을했습니다 그 배열을 바로 거기에, 도착 선언. 즉 보유 할 수있다 10 4 바이트 단위. 총 그래서, (40)을 보유 할 수 있습니다 바이트 정보의 가치. 그리고 우리는 지금 40 바이트를 읽고 파일의 정보, 우리는 도착에 저장하고 있습니다. 포인터의 비디오에서 기억이 이러한 도착 같은 배열의 이름, 정말 그냥 포인터입니다 그 첫 번째 요소. 그래서 우리가 거​​기 도착에 통과 할 때, 우리 포인터를 전달 사실이다. 마찬가지로 우리는이 항아리를 할 수 우리는 필요하지 않습니다 스택에 우리의 버퍼를 저장해야합니다. 우리는 또한 동적으로 할당 할 수있다 의 malloc를 사용하여, 다음과 같이 버퍼. 때, 기억 동적으로 메모리를 할당, 우리는 그것을 저장하고 힙이 아닌 스택. 하지만 여전히 버퍼입니다. 여전히,이 경우에 있어서는, 정보의 640 바이트를 들고 더블 8 바이트를 차지하기 때문이다. 그리고 우리는 그 (80)를 요구하고 있습니다. 우리는 공간을 갖고 싶어 80 루타를 개최합니다. 이렇게 80 시간 8은 640 바이트의 정보이다. 그리고 FREAD에 그 전화입니다 정보의 640 바이트를 수집 파일을 가리키는에서 ptr에와 arr2에 지금 저장. 이제 우리는 또한 FREAD를 처리 할 수 단지는 fgetc를 호출있다. 이 경우에, 우리는에하려는 파일에서 한 문자를 얻을. 그리고 우리는 필요하지 않습니다 배열은 문자를 개최합니다. 우리는 단지 그것을에 저장할 수 있습니다 문자 변수. 잡기는하지만,이다 우리는 단지 변수가있을 때, 우리는에 전달해야 그 변수의 주소 리콜 그 때문에 FREAD에 첫 번째 인수 메모리 위치에 대한 포인터이며 우리는 정보를 저장할 위치. 다시,의 이름 배열은 포인터입니다. 그래서 우리는 앰퍼샌드 배열을 수행 할 필요가 없습니다. 그러나 C, 문자 C 여기에, 배열이 아닌. 그냥 변수입니다. 그래서 우리는을 통과해야 앰퍼샌드 C를 나타냅니다 그것은 우리가 원하는 주소 있다는 정보의 한 바이트를 저장하기 위해, 이 하나의 문자가 우리는 PTR에서 수집하고 있습니다. 나는 통과 할 것이다 Fwrite-- 이 조금 더 quickly-- 꽤 많이 있습니다 FREAD의 정확한 동등한 이 기록에의 제외 대신 읽기, 단지 다른 것이라면처럼 우리는 오픈 했어요 과 가까운 문자를 얻을, 문자를 기입합니다. 지금은 임의의 수의 정보의 양, 정보의 권리 임의의 양. 그래서 그냥 예전처럼, 우리는 할 수 10 정수 배열을 가지고 여기서 우리가 이미 정보는 아마도, 저장. 아마 몇 줄의 코드이었다 즉,이 두 가지 사이에 가야한다 나는 함께, 언 채울 경우 의미있는 뭔가. 나는 10 개의 서로 다른 정수로 채운다. 그리고 대신에, 내가 뭘 해요 일 도착에서 쓰고있다 및 도착로부터 정보를 수집. 그리고 그 정보를 데려 갈거야 그리고 파일에 넣는. 그래서 그 대신은에서가되는 버퍼에 파일, 우리는 지금부터거야 파일 버퍼. 그래서 그냥 반대입니다. 직전 같은 다시, 우리는 할 수 또한 메모리의 힙 덩어리가 우리는 동적했는지 할당하고 읽기 및 파일에 그 물품. 그리고 우리는 또한 하나의 변수가 한 바이트를 보유 할 수 이러한 문자로 정보의. 그러나 다시, 우리는에 전달해야 그 변수의 주소 우리는 그것에서 읽고 싶은 경우. 그래서 우리는 정보를 기록 할 수 있습니다 우리는 그 주소로 찾기 파일 포인터 ptr이. 다른 많은있다 큰 파일 I / O 기능 그 외에 다양한 일을 할 사람들은 우리가 오늘에 대해 얘기했습니다. 사람의 커플 당신이 유용 할 수 있습니다 는 fgets와 fputs는, 이는 동일 는 fgetc와 fputc의 만 읽어 파일에서 하나의 문자열. 대신 단일 문자의, 그것은 전체 문자열을 읽습니다. 기본적으로 수 fprintf와, 당신은 파일에 쓸의 printf를 사용합니다. 당신은 할 수 있습니다처럼 사용 변수 대체 자리 %의 i와 printf의 퍼센트와 D 등, 당신은 유사 걸릴 수 있습니다 printf의 문자열과 인쇄 무엇인가 파일에 그런. fseek-- 당신은 DVD 플레이어가있는 경우 나는 보통 here-- 사용하는 비유입니다 종류의 사용처럼 당신의 되감기 및 빨리 감기 버튼은 영화의 주위에 이동합니다. 마찬가지로 파일을 이동할 수 있습니다. 내부의 것들 중 하나 해당 파일의 구조 이 지표는 동안 그 C가 생성 여기서 당신은 파일에 있습니다. 당신은 매우에 있습니다 바이트 제로에서 시작? 당신이 바이트 100에 있으며, 1000 바이트 등? 당신은 임의로 이동할 대해 fseek 사용할 수 있습니다 앞으로 또는 뒤로 그 표시. 그리고 다시, ftell은 DVD 플레이어와 유사하게, 알려주는 작은 시계처럼 당신이 얼마나 많은 분, 초를 특정 영화에 있습니다. 마찬가지로, ftell은 그 방법을 알려줍니다 바이트는 파일에 있습니다. 무엇이 일어 났는지를 결정하기 위해 feof는 다른 버전입니다 의 당신은했습니다 여부를 검출 파일의 끝에 도달. 그리고 ferror 함수는 함수 당신이 사용할 수있는 뭔가가 있는지 여부를 감지하는 파일과 잘못된 작업을 사라. 다시, 이것은 그냥 표면을 긁는. 많은 더 많은 파일 I / O 아직있다 표준 io.h. 함수 그러나 이것은 아마 당신을 얻을 것이다 파일 포인터와 함께 일하기 시작했다. 나는 더그 로이드입니다. 이 CS50입니다.