fwrite는 어떤 일을 하는 함수일까요? block의 데이터를 stream에 쓰는 함수입니다. 함수 원형은 아래와 같습니다. 1번째 인자인 ptr은 쓸 데이터를 의미합니다. void형 포인터인게 눈에 띄는데요. 써야 할 데이터가 moo를 가리키는 포인터인지, student를 가리키는 포인터인지 모르거든요. 2번째 인자인 size는 몇 byte를 쓸 거냐를 나타냅니다. count는 몇 번이나 쓸 지를, 4번째는 파일 포인터를 의미합니다. 예제를 보면서 차근 차근 설명해 보도록 하겠습니다. 프로그램 1을 보겠습니다. 이걸 보기 전에, 1.txt를 먼저 생성해 보겠습니다. 일단 1.txt는 빈 파일입니다. 이는 ls 명령어를 통해서 봐도 알 수 있고, cat 1.txt | wc 명령어를 입력해도 알 수 있습..
C언어 검색 결과
이번 시간에는 c언어 fread 함수를 먼저 알아보도록 하겠습니다. 사용법이 다소 복잡해 보입니다. ptr은 파일에서 읽어온 것을 저장할 block을 가리키는 포인터입니다. 다음에, size는 block의 사이즈, count는 갯수를 의미합니다. 만약에, size개의 크기를 count개만큼 읽어오겠다고 한다면, 읽어온 총 byte 수는 size에 count를 곱한 값입니다. 파일 지시자가 가리키는 위치로부터 size에 count를 곱한 byte만큼 주루룩 읽어오는 함수가 fread인 셈입니다. 먼저 1.txt에 다음과 같은 내용을 저장하였습니다. fw 프로그램은, fwrite 함수를 이용해서 moo형 레코드를 하나 하나씩 1.txt라는 파일에 썼습니다. 1.txt에는 다음과 같은 내용이 저장이 되어 있는..
이번 시간에는 c언어 fseek 함수를 배워보도록 하겠습니다. 이 함수는, 간단하게 요약하면 파일의 임의 위치에 접근하게 해 주는 함수입니다. 당연하게도, 탐색할 수 없는 파일이면, 이 함수를 호출하는 것이 무용지물일 거에요. 먼저, 0123456789라는 내용을 적은 input.txt를 생성해 보겠습니다. cat input.txt를 하면, 0123456789가 출력이 될 겁니다. 같은 디렉토리에 있는 실행파일 fs는 input.txt의 내용을 읽고 쓰는 함수입니다. input.txt가 존재하기 떄문에, 파일을 여는 연산은 성공해야 할 듯 싶습니다. 그런데 보기 좋게 fail이 뜹니다. 뭐가 문제일까요? 파일이 분명 있는데. 의심해 볼 만한 것 중에는 권한이 있습니다. 어떠한 User로 로그인이 되어 있..
rewind 함수에 대해 알아보겠습니다. 이것은 stream의 파일 위치 지시자를 시작 위치로 옮기는 함수입니다. 별 게 없어 보입니다. 사실 이는, 다음과 같습니다. 다만, error 지시자가 초기화가 되고 안 되고는 다릅니다. 이는 링크에서 except that the error 구문을 해석하시면 알 수 있습니다. 이제 예제를 몇 개 보도록 하겠습니다. 먼저 아래 예제를 보도록 하겠습니다. 문자열을 입력받고, 입력 버퍼를 초기화 하기 위해서, rewind(stdin); 을 호출해 주었습니다. 다음에 문자 하나를 입력받습니다. 의도대로 동작했을까요? chogahui를 입력하고 엔터를 입력했습니다. 프로그램의 의도는, 다음에 소문자를 입력받는 것이였습니다. 그런데, 엉뚱한 문자인 개행 문자를 입력 받았습..
c++의 STL을 쓰다 보면, 의도치 않게 공백을 포함해서 입력을 받아야 하는 경우가 있습니다. 이 때, 저는 fgets를 많이 이용합니다. 이 함수의 원형은 아래와 같습니다. 2번째 인자인 num이 눈에 보이는데요. num - 1개의 문자만큼 받거나, '\n'을 입력받거나, 아니면 EOF가 입력될 때 까지 입력을 받습니다. gets와는 다른 특성을 가지는데요. num이 없어요. 몇 byte까지 받아야 되는 정보가 없고, 단지 포인터만 넘겨줍니다. 문자열의 시작 주소만 넘겨준 상태에서, 크기를 모르는 상태에서 무한정 받아버리면 어떻게 될까요? 허용되지 않는 공간에 이상한 값을 덮어씌워 버릴 수 있어요. 안전하지 않아요. bound 조차 없기 때문입니다. 얼만큼 받을 건지에 대해서 넘겨주기 때문에, 기본적..
최근댓글