**입출력의 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(불러오기(입력)할 메모리의 시작 주소, 입력할 메모리의 사이즈, 입력할 메모리의 개수, 스트림)

절대 경로 : 드라이브명 부터 현재 파일의 위치까지 모두 표시한 것 (속도 빠름)

상대 경로 : 프로젝트 파일의 기준으로 현재 파일의 위치를 표시한 것 (범용성이 좋음)

리소스

  • 프로세스
  • 쓰레드
  • 파일