рд▓рд┐рдирдХреНрд╕ рдкрд░ zstd: рджреЛ рдЕрд╡рд▓реЛрдХрди
1) рдЕрдЧрд░ рдореИрдВ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gzip рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрджрд┐ рдореИрдВ ^C рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ gzip рдХреЛ рдорд╛рд░рддрд╛ рд╣реВрдВ, рддреЛ gzip рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред zstd рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ gzip рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкреВрд░реНрдг рдпрд╛ рджреВрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рди рд╣реЛред
2) рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдпрд╛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рддреЗ рд╕рдордп, zstd рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ (рд╕реНрдЯреНрд░реЗрд╕ рд╕реЗ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
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");
, рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рдмрд┐рдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕ рдЯреНрд░реЗрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдпрд╣ рдЬрд╛рди рд▓реЗрдВ рдХрд┐ рдЗрд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛рд░рдгреЛрдВ (рдФрд░ рдХрдо рдирд┐рд░реНрднрд░рддрд╛ рд╕рд┐рд░рджрд░реНрдж) рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕реА рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ: 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
рдЕрдиреБрдкрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реА,
рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЧреИрд░-рдкреЙрдЬрд╝рд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдпрд╛ рдХрд╕реНрдЯрдо рд░реИрдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдХреАрдордд рдкрд░ рдкреЙрдЬрд╝рд┐рдХреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╡рд┐рдВрдбреЛрдЬрд╝ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред
zstd
рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрдерд╛рд╕рдВрднрд╡ рдорд╛рдирдХ-рд╕реА рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рд╣рдо рдХрднреА-рдХрднреА рдХреБрдЫ рдУрдПрд╕-рдирд┐рд░реНрднрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдХреЛрдИ рдорд╛рдирдХ-рд╕реА рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрдИ рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реЗ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВ)ред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди signal()
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирдХ C рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ , рдЬреЛ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреЛрд░реНрдЯреЗрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдирд╡реАрдирддрдо dev
рд╢рд╛рдЦрд╛ рдЕрджреНрдпрддрди рдореЗрдВ, рдореИрдВрдиреЗ Ctrl-C
рдЯреНрд░реИрдкрд┐рдВрдЧ рдХреЛ zstd
cli рдореЗрдВ рдЬреЛрдбрд╝рд╛ред
Ctrl-C
рджрдмрд╛рдиреЗ рдкрд░, рдпрд╣ рдЕрдм рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдСрдкрд░реЗрд╢рди рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ (рдЕрдзреВрд░реА рдЧрдВрддрд╡реНрдп рдлрд╝рд╛рдЗрд▓) рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИред