언제 사용?
1. 컴파일러 만들때
2. 그림 파일 저장 해석
자료는 DB로 저장, SQL 사용
3. 옵션 지정 할때
컴파일 따로 안하고 옵션에 따라 실행되도록
>> 실제에선 사실 라이브러리 가져다씀
하드웨어마다 데이터 저장 방법은 다 다름
( ssd, hdd, 플로피디스크 flash memory,,,,)
임베디드 > 데이터시트를 다 읽어봐야함
한번에 얼마나 저장, 몇번 기록, 통신방식, 패킷
그래야 1byte 를 저장할 수 있음
>> 계층(단계) 을 나눔
hw <-> driver <-> 운영체제> read write open
>함수를 쓰면 운영체제에서 누군가 만든 driver 구현한거를 이용해서 hw에 접근
스트림
write : hdd에 기록 > 때때마다 하면 굉장히 비효율적,,
(ex) hdd가 한공간에 8byte > write가 1byte 라면 손해 큼
>>중간에 스트림 영역 확보
어느정도 찼을때 hdd에 넣음
>> 중간에 꺼버리면 hdd에 기록못하고 날라갈 수도 있음
(바로 넘기는 함수도 존재)
어플리케이션단 함수 ( f 가 붙음)
fopen > 파일 스트림이 열림
fread > 열린것을 읽어옴
fwrite > 열린것을 씀
fclose >반드시! 닫아줘야함
fseek : 커서를 움직이는 함수 ( txt 상에서 커서)
> 맨끝으로 가면 EOF 로 반환 // EOF = -1
for문에서 open
close를 안하면 메모리리프 같은 오류 발생
파일입출력 예제
텍스트파일 a.txt
-main.c-
FILE * fd; // fd라는 구조체
char ch;
fd= fopen("a.txt", "r"); //포인터명, fopen(파일명,모드) // r: read //반환 : NULL
// w: 지우고 새로씀. a : 뒤에다 추가
if(fd==NULL) //반환형 NULL > fd가 없을때
ch=fgetc(fd); // ch 배열에 텍스트파일읽어온 fd 를 싹 넣음
if(ch==EOF){ // End Of File : 파일의 끝
break;
}putchar(ch); // 문자 출력함수
// if 문을 먼저 써서 EOF 일때를 걸러내기
fclose(fd); //닫기
@
fd= fopen("a.txt", "a");
fprintf(fd, "hello~ hello~ \n");
fclose (fd); //쓰기모드
>>>>>
1.파일을 연다. ( 여는 옵션이 있다.)
읽기모드, 쓰기모드,추가모드 ,,,, 여러가지 모드가 있다.
2. 파일을 읽거나,쓴다
3. 파일을 닫는다
표준입출력
소스코드 : 입력
콘솔창: 출력
int fd; // open 의 return : 정수형
fd = open ("a.txt", O_WRONLY | O_APPEND);
(쓰기전용) | ( 추가모드) // 기존 파일 유지하면서 (비트) or > 둘다함
// 비트 연산값//
-1 : 파일 열기 실패
0 : 내 키보드
1 : 표준 출력 (콘솔) // printf 같은 함수들
2 : 에러 출력 (콘솔) // 오류메세지 출력용
3,4,5,6.. : open 같은 함수, 차례로 쭈루룩
//표준출력 디스크립터(입출력 스트림 식별하기 위한 정수)
ex)
표준 출력 : 표준출력 디스크립터
int fd = fileno(stdiout)
printf ( "printf(디스크립터 값: %d\n", fd); // 1이 나옴
>> fd = 1
표준함수 리턴값
int count = printf("Hello World! \n");
printf(" printf result= %d\n", count);
>> count = 13 // \n 은 한개