Linux์ zstd : ๋ ๊ฐ์ง ๊ด์ฐฐ
1) ํฐ ํ์ผ์ ์์ถํ๊ธฐ ์ํด gzip์ ์์ํ๊ณ ^ C๋ฅผ ์ฌ์ฉํ์ฌ gzip์ ์ข ๋ฃํ๋ฉด ์ข ๋ฃํ๊ธฐ ์ ์ gzip์ด ์ถ๋ ฅ ํ์ผ์ ์ญ์ ํฉ๋๋ค. zstd๋ ํ์ฌ ๊ทธ๋ ๊ฒํ์ง ์์ต๋๋ค. ๋ถ์์ ํ๊ฑฐ๋ ์์๋ ์ถ๋ ฅ ํ์ผ์ ๊ฐ๋ ๊ฒ๋ณด๋ค ์ถ๋ ฅ ํ์ผ์ด์๋ ๊ฒ์ด ๋ซ๊ธฐ ๋๋ฌธ์ gzip์ ๋์์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
2) ํ์ผ์ ์์ถํ๊ฑฐ๋ ์์ถ์ ํ ๋ zstd๋ ์๋ ์์คํ
ํธ์ถ์ ์ฌ์ฉํ์ฌ strace์์ ์ถ๋ ฅ ํ์ผ์ ๋ง๋ญ๋๋ค.
open("file.zst", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
gzip ๋ฐ xz๋ ์ ์ฌํ ์์คํ
ํธ์ถ์ ์ฌ์ฉํ์ง๋ง ๋ชจ๋ 0600์ ์ฌ์ฉํฉ๋๋ค. ํ์ผ์ด ๋ซํ ํ ์ถ๋ ฅ ํ์ผ์ ๋ชจ๋๋ฅผ ์ํ๋ ๋ชจ๋๋ก ์ ํํฉ๋๋ค. zstd๊ฐ 0666์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์์ต๋๊น? 0600์ด ๋ ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ผ์ด ์ค๋น๋๊ธฐ ์ ์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์ฝ๊ธฐ ์ก์ธ์ค๋ฅผ ํ์ฉํ์ง ๋ง์ญ์์ค.
^C
์ด๋ฒคํธ๋ฅผ ํธ๋ํํ๋ ค๋ฉด ์ ํธ ์ฒ๋ฆฌ๊ธฐ๊ฐ ํ์ํฉ๋๋ค. ์์ง ์กฐ์ฌํ์ง ์์์ต๋๋ค. ํด๋ ์ฑ ๋ฌธ์ ๋ ๊ฑฑ์ ์
๋๋ค.
๋น์ ์ ํ์ ์ ์ฐ๋ฆฌ ์ฝ๋๋ณด๋ค ๋ ์ ํํฉ๋๋ค.
๋์ ํ์ผ ์ด๊ธฐ ํธ์ถ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/facebook/zstd/blob/dev/programs/fileio.c#L324
ํ์ค fopen("name", "wb");
์ผ ๋ฟ์ด๋ฉฐ ์์ฑ ๋นํธ๋ฅผ ์ ์ดํ์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋น์ ์ ์์คํ
์์์ด ์ถ์ ์ผ๋ก ๋ณํ๋ฉ๋๋ค. ๋จ์ง ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ํต์ ํ ์ ์๋ค๋ ๊ฒ์ ์์ญ์์ค.
์ผ๋ฐ์ ์ผ๋ก ์ด์์ฑ (๋ฐ ์์กด์ฑ ๋ฌธ์ ๊ฐ์)์ ์ํด ๊ฐ๋ฅํ ํ ํ์ค C์ ๊ฐ๊น๊ฒ ์ ์งํ๋ ค๊ณ ํฉ๋๋ค.
์ฐ์ : zstd๋ฅผ ์์ฑํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์๋์ ์์ถ๋น์ ๋๋์ต๋๋ค! ์์ฃผ ์ข์์!
์ด ํฐ์ผ์ ๋ซ์ผ์ญ์์ค. ๋ด ๋ ๊ฐ์ง ๊ด์ฐฐ์ ์ฌ์ํ ์ผ๋ฟ์ด๋ฉฐ ์๋ฌด๊ฒ๋ํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํด๋ ๊ด์ฐฎ์ต๋๋ค.
int flags = O_WRONLY | O_BINARY | O_NOCTTY | O_CREAT | O_EXCL;
#ifndef TUKLIB_DOSLIKE
flags |= O_NONBLOCK;
#endif
const mode_t mode = S_IRUSR | S_IWUSR;
dest_fd = open( dest_name, flags, mode );
fopen () ๋์ open ()์ ์ฌ์ฉํ๋ฏ๋ก ์ถ๋ ฅ ํ์ผ์ ๊ถํ ๋นํธ๋ฅผ ์ ์ด ํ ์ ์์ต๋๋ค.
๋ง์ต๋๋ค. xz
์ (๋) POSIX
ํธํ ์์คํ
์ ๋์์ผ๋กํฉ๋๋ค.
๋ฐ๋ผ์ posix ๊ฐ ์๋ ์์คํ
๊ณผ ํธํ๋์ง ์๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ ๋ํผ๊ฐ ํ์ํ
zstd
๋ ์ด์์ฑ ๊ด์ ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ฐ๋ฅํ ํ ํ์ค C ๊ฐ ๋๋ ค๊ณ ํฉ๋๋ค.
๊ธฐ์ ์ ์ผ๋ก๋ ํ์ค C์ ํด๋นํ๋ ์ธํฐํ์ด์ค๊ฐ ์์ ๋ ์ผ๋ถ OS ์ข ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ๋ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ๋ฌ ๋์์ ์ง์ํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ณํ์ ์์ฑํ๋ ค๊ณ ์๋ํ๊ณ ์ง์๋์ง ์๋ ๋์์ ๊ฒฝ์ฐ ๊ด๋ จ ๊ธฐ๋ฅ์ด ์์ ํ ๋นํ์ฑํ๋ฉ๋๋ค (ํ์์ ์ด์ง ์์ ๊ฒฝํฅ์ด ์์).
๊ทธ๊ฒ์ ๋ํด ์กฐ๊ธ ๋ ๋ฐฐ์ฐ๋ฉด ํจ์ signal()
๋ ์ค์ ๋ก ํ์ค C์ ์ผ๋ถ์ด๋ฏ๋ก ์ด์์ฑ์ด ๋งค์ฐ ์ข์ต๋๋ค.
์ต๊ทผ dev
๋ธ๋์น ์
๋ฐ์ดํธ์์ zstd
cli์ Ctrl-C
ํธ๋ํ์ ์ถ๊ฐํ์ต๋๋ค.
Ctrl-C
๋๋ฅด๋ฉด ์ด์ ์ข
๋ฃํ๊ธฐ ์ ์ ์์
์ํฐํฉํธ (์๋ฃ๋์ง ์์ ๋์ ํ์ผ)๋ฅผ ์ง ์๋๋ค.