System Programming Ch5
๐กย Chap_5
Stream Orientation
#include <stdio.h>
#include <wchar.h>
int fwide(FILE *fp, int mode);
wchar.h : singlebyte๋ฅผ ์ธ์ง multibyte๋ฅผ ์ธ์ง ์ ์ดํ ์ ์๋ ํค๋
singlebyte : 1 byte (8bit)๋ก ๋ฌธ์๋ฅผ ํํ ๊ฐ๋ฅ ํ ๋ฌธ์ โ ASCII ์ฝ๋
multibyte : ํ๊ธ์ ํํํ๋ ค๋ฉด ์ต์ 2๋ฐ์ดํธ๊ฐ ํ์ํจ, ์ด๋ ์ฐ๋ ๊ฒ
fwide : ํ์ผ์ ์ฌ๋ ์๊ฐ ์ฝ์๊ฑด์ง ์ธ๊ฑด์ง ๊ฒฐ์ ํ๋ stream(ํต๋ก)์ด ์๊น, ๊ทธ ์คํธ๋ฆผ์ ์์ฑ, ๋ฐฉํฅ์ ์ง์ ํด ์ค, singlebyte๋ก ์ธ๊ฑด์ง multibyte๋ก ์ธ๊ฑด์ง ๊ฒฐ์
Buffering
#include <stdio.h>
void setbuf(FILE *fp, char *buf);
int setvbuf(FILE *fp, char *buf, int mode, size_t size);
setbuf
- ๋ฒํผ์ ์ฌ์ฉ์ฌ๋ถ/ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ ํจ์
- char *buf ์ธ์์ null์ ๋ฃ์ผ๋ฉด ๋ฒํผ๋ง์ ์ํจ โ ๋ฒํผ๋ง์ ํ ์ง ๋ง์ง๋ ๊ฒฐ์ ํจ
- ์ฌ์ฉ์ ์ง์ ๋ฒํผ๋ง
setvbuf
- ์ธ์์ ๋ชจ๋๊ฐ ๋ค๋ฆ
- mode : _IOFBF, _IOLBF, _IONBF
- ๋ชจ๋๋ ์์คํ ์์ ์ ๊ณตํด์ฃผ๋ ๊ฒ, ์์คํ ์์ ์ ์๋ ๋ชจ๋๋ฅผ ๊ฐ์ ธ๋ค ์
fflush
#include <stdio.h>
int fflush(FILE *fp);
// A stream or all output streams, if fp is NULL, are flushed
- ๋ฒํผ์ ์๋ ๊ฒ์ ๋ค ๋ ๋ฆผ
- input stream์๋ ์ธ ์ ์์
- ๊ทผ๋ฐ ๋ณดํต output์ ์๋ ๊ฒ๋ง ๋ ๋ฆผ
- ์ธํ์ ์ฌ์ฉ์์ ๋ ฅ์ด๋ฏ๋ก ์ค๋ฆฌ์ง๋ ์ ๋ณด๊ฐ ํผ์๋๋ค๊ณ ์๊ฐํด์ ์ flushํ์ง ์์
- ์์ํ์ ์๋ ๊ฒ์ ๋ชจ์ข ์ ์ด์ ๊ฐ ์์ด์ ์์ํ์ด ์๋ ๊ฒ, ๋ฐ๋ผ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ด๋ฏ๋ก ๋ ๋ฆผ
Opening a Stream
fopen : ํ์ผ์ ์ฌ๋ ํจ์
freopen : ํ์ผ์ ๋ค์ ์ฌ๋ ํจ์
fdopen : fopen๊ณผ ๋์ผํ ๋์, pipe์ network์ ๊ด๋ จ๋ ์ฑ๋์์ ์ฌ์ฉ๋จ
fclose
- ์์ํ ๋ฒํผ๋ฅผ flush๋ก ๋ค ์ง์ฐ๋ฉด์ ํ ๋น๋์ด์๋ ๋ฒํผ๋ฅผ ์๋์ผ๋ก ๋ฐํํ๋ ํจ์
- ๋ซ๋๋ค๋ ํค์๋ ์์ด fclose๋ฅผ ๋ฌผ์ด๋ณผ ์๋ ์์
Reading and Writing a Stream
getc
- get character, ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ด
- ๋ฉํฌ๋ก์ฒ๋ผ ๋์
fgetc
- char๋ฅผ ์ฝ์ด์ค๋ ํจ์๋ฅผ ํต fgetc๋ก ํต์ผ (fgetc๋ฅผ ํธ์ถํ๋ฉด ์์์ getc๊ฐ ๋์๋จ)
- ์ฌ์ฉ์๋ค์ ์ธํฐํ์ด์ค๋ฅผ ์ํด ๋ง๋ ํจ์
getchar
- getc(stdin)๊ณผ ๊ฐ์, ์ธ์๊ฐ ํ์์์, ์ธ์๊ฐ stdin(ํ์ค์ ๋ ฅ 0)์ผ๋ก ๊ณ ์
ํค๋ณด๋๋ก๋ถํฐ ์ ๋ ฅ๋ฐ๋ ๊ฒ์ ๋ฐ์๋ค์ด๊ฒ ๋ค โ getchar
ํ์ผ๋ก๋ถํฐ ํ๋ฌธ์์ฉ ์ฝ์ด๋ค์ด๊ฒ ๋ค โ fgetc
ferror
- getc์ ๊ฐ์ ํจ์๋ ์ค๊ฐ์ ์๋ฌ๊ฐ ๋ฌ๋์ง, ํ์ผ์ ๋์ธ์ง ํ์ธ์ด ์๋จ
- ์ด๋ ์๋ฌ๊ฐ ๋ฌ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋งํ๋ ํจ์
feof
- ferror๊ณผ ๊ฐ์ ๋์
clearer
ungetc
- ์ฝ์ด์ค๋ ์คํธ๋ฆผ
- ์ฝ์ด์ค๋ queue, ๊ทธ ๋ฒํผ์ ๋ค์ ๋ฃ์ด์ค
- ๋ฌธ์๋ฅผ ์ฝ๊ณ ๋์ ๋ฒ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ๋๋ก ๋ฐํ
putc
- char ์ฐ๊ธฐ(์ถ๋ ฅ)
fputc
- ์์์ putc ํธ์ถ
putchar
- stdout, ํ์ค์ถ๋ ฅ(1)์ ์ธ์๋ก
- ๋ชจ๋ํฐ์ ๋ฌธ์ ํ๋๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ผ๋ก ๊ณ ์
Line-at-a-Time I/O
fgets
- ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ์ ๋ ์ฐ๋ ํจ์
gets
- ์ผ๋ง๋งํผ์ ์์ ๋ฐ์์ฌ ์ง ์ธ์๋ก ๋ฐ์ง ์์
- ๋ฐ๋ผ์ ์ทจ์ฝํ๋ฏ๋ก fgets๋ฅผ ์
fputs
- put string, ๋ฌธ์์ด์ ์ธ(์ถ๋ ฅํ ) ๋ ์ฐ๋ ํจ์
puts
- fputs์ ๊ฐ์ ๋์
- ์๋ ์ค๋ฐ๊ฟ์ด ๋จ
Binary I/O
fread, fwrite
- ๊ณ ์์ค์ ์ ์ถ๋ ฅ
- ๊ณ ์์ค ์ ์ถ๋ ฅํจ์๋ค์ unbuffered์ ๋ฐ๋, buffered๋ฅผ ํจ
Positioning a Stream
ftell
- ํ char์ฉ ์ฝ์ด๊ฐ(getc๋ก), ๊ทธ๋ ํฌ์ธํฐ๊ฐ ํ๋์ฉ ์์ง์
- ์ด๋ ์ด ํฌ์ธํฐ๊ฐ ์ด๋์๋์ง๋ฅผ ์๋ ค์ค
- ์ฆ, ๋ช๋ฒ์งธ๊น์ง ์ฝ์๋์ง ์๋ ค์ค
- ๋์คํฌ๋ฆฝํฐ ๋ด์ ํ์ผ
fseek
- ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฐ๋ก ํ์ผ ํฌ์ธํฐ๋ฅผ ์ฎ๊ฒจ๊ฐ
- ์ธ์ whence (SEEK_SET, SEEK_CUR, SEEK_END)
rewind
- ์์ ์ฒ์์ผ๋ก ํ์ผ ํฌ์ธํฐ๋ฅผ ์ฎ๊ธฐ๋ ํจ์
(๋จ๋ตํ) ๋์คํฌ๋ฆฝํฐ ๋ด์ ํ์ผ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ฅผ ๋ฐํํ๋ ํจ์ โ ftell
(๋จ๋ตํ) ์ฌ์ฉ์๊ฐ ์ํ๋ ์์น๋ก ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ํ์ผ ํฌ์ธํฐ๋ฅผ ์ฎ๊ธฐ๋ ํจ์ โ fseek
(๋จ๋ตํ) ๋์คํฌ๋ฆฝํฐ์ ํ์ผ ํฌ์ธํฐ๋ฅผ ์ ์ผ ์ฒ์์ผ๋ก ์ฎ๊ธฐ๋ ํจ์ โ rewind
ftello
- ftell๊ณผ ๊ฐ์ ์ญํ
- off_t ์ ์๋ฃํ์ผ๋ก ๋ฐํ ๋ฐ์
fseeko
- fseek๊ณผ ๊ฐ์ ์ญํ
- offset ์ธ์์ ์๋ฃํ์ด off_t
fgetpos
- ftell๊ณผ ๊ฐ์ ์ญํ , ๋์คํฌ๋ฆฝํฐ์ ํ์ผ ํฌ์ธํฐ์ ์์น๋ฅผ ์๋ ค์ค
- ftell์ posix, fgetpos๋ isoc standard์์ ๋ง๋ ํ์ค
fsetpos
- fseek๊ณผ ๊ฐ์ ์ญํ
- isoc ํ์ค