**입출력의 3가지
- 콘솔 입출력
- 파일 입출력
- 소켓 입출력
**스트림
- 데이터의 흐름(단 방향성)
**버퍼
- 메모리 블럭, 무언가를 저장하기 위한 공간
**입출력 모드
- 텍스트 모드 : 입출력의 결과 상태를 문자열 형태로 지원
- 바이너리 : 입출력의 결과 상태를 2진수 형태로 지원
**문자열 입출력 함수 (텍스트 모드)
오로지 문자열에 대한 입출력만 필요 할 때 사용되는 함수
콘솔 기반 전용 함수 : 콘솔 입출력 시에만 사용
공용 함수 : 모든 입출력 사용 가능
**단일 문자 출력 함수(아스키 코드 문자)
putchar(65);
putchar('z');
**콘솔 입출력 시 사용 가능한 스트림 종류
stdin : 표준 입력 스트림(키보드 대상)
stdout : 표준 출력 스트림(모니터 대상)
stderr : 표준 에러 스트림(모니터 대상)
**단일 문자 입력 함수
fputc(66, stdout);
fputc('q', stdout);
char cTemp = getchar();
putchar(cTemp);
char cTemp = fgetc(stdin); enter도 문자 읽기 수행
fputc(cTemp, stdout);
EOF (End Of File, 파일 끝 의미)
콘솔 입출력의 경우 ctrl + z 가 eof를 발생
**문자열 출력 함수
fputs("hello", stdout); 자동 개행을 제공하지 않음
puts("hello"); 자동 개행 제공
텍스트 모드에서의 endl은 "\r\n"로 작동한다
\r carriage return : 맨 앞으로 이동
바이너리 모드에서는 \r이 작동하지 않음
fputs는 바이너리 모드에서도 사용되기 때문에 공백을 처리 하지 않음(공백도 데이터 일 수 있기 때문)
**문자열 입력 함수
char Temp[32];
gets_s(Temp, sizeof(Temp)) 공백을 읽어들임
puts(Temp) 용량보다 큰 문자열인 경우 에러
fgets(Temp, sizeof(Temp), stdin) 읽어들일 수 있는 만큼 읽기를 수행
fputs(Temp, stdout); enter(개행)을 읽어들이며, '\0'문자를 고려함
fflush(stdout) : 출력 버퍼를 비우는 함수
while('\n'!=getchar()); '\n'을 만날 때 까지 입력버퍼에서 문자를 하나씩 가져옴 = 입력버퍼 비우기
**파일 입출력
어떠한 언어든 파일 입출력 시 반드시 수행해야 하는 동작
1. 파일 개방(스트림 생성) → 핸들 생성 2. 파일 입, 출력 함수 3. 개방한 파일 소멸 시키기
errno_t fpoen_s(FILE** _Stream, char const* _FileName, char const* _Mode);
_FileName : 파일의 경로
_Mode : 파일 개방 시의 모드 설정정
**파일 쓰기
**파일 읽기
**파일 입출력 함수
int fseek(FILE * _Stream, long _Offset, int _Origin);
fseek : 파일의 커서를 이동시키는 함수(파일 스트림, 이동할 바이트 수, 커서의 시작 시점)
long ftell( FILE * _Stream)
ftell : 현재 파일 지시자(커서)의 위치를 알려주는 함수, 시작 위치는 0
int feof(FILE * _Stream)
feof : 파일 지시자(커서)가 eof에 도달했는지 검사하는 함수, 파일 끝에 도달하면 0이 아닌 값을 반환
**바이너리 입출력 모드 함수
fwrite(저장(출력)할 메모리의 시작 주소, 출력할 메모리의 사이즈, 출력할 메모리의 개수, 스트림)
fread(불러오기(입력)할 메모리의 시작 주소, 입력할 메모리의 사이즈, 입력할 메모리의 개수, 스트림)
절대 경로 : 드라이브명 부터 현재 파일의 위치까지 모두 표시한 것 (속도 빠름)
상대 경로 : 프로젝트 파일의 기준으로 현재 파일의 위치를 표시한 것 (범용성이 좋음)
리소스
- 프로세스
- 쓰레드
- 파일