fmemopen(3) - wariua/manpages-ko GitHub Wiki

NAME

fmemopen - ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์—ด๊ธฐ

SYNOPSIS

#include <stdio.h>

FILE *fmemopen(void *buf, size_t size, const char *mode);

glibc ๊ธฐ๋Šฅ ํ™•์ธ ๋งคํฌ๋กœ ์š”๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):

fmemopen():
glibc 2.10๋ถ€ํ„ฐ:
_POSIX_C_SOURCE >= 200809L
glibc 2.10 ์ „:
_GNU_SOURCE

DESCRIPTION

fmemopen() ํ•จ์ˆ˜๋Š” mode๋กœ ์ง€์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์„ ์—ฐ๋‹ค. ๊ทธ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด buf๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด ๋‚ด์ง€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ์— I/O๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

mode ์ธ์ž๋Š” ์ŠคํŠธ๋ฆผ I/O์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

r
์ŠคํŠธ๋ฆผ์„ ์ฝ๊ธฐ์šฉ์œผ๋กœ ์—ฐ๋‹ค.
w
์ŠคํŠธ๋ฆผ์„ ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ฐ๋‹ค.
a
๋ง๋ถ™์ด๊ธฐ. ์ŠคํŠธ๋ฆผ์„ ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ด๊ณ  ์ดˆ๊ธฐ ๋ฒ„ํผ ์œ„์น˜๋ฅผ ์ฒซ ๋„ ๋ฐ”์ดํŠธ ์œ„์น˜๋กœ ์„ค์ •ํ•œ๋‹ค.
r+
์ŠคํŠธ๋ฆผ์„ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ฐ๋‹ค.
w+
์ŠคํŠธ๋ฆผ์„ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ฐ๋‹ค. ๋ฒ„ํผ ๋‚ด์šฉ๋ฌผ์„ ์ž˜๋ผ๋‚ธ๋‹ค. (์ฆ‰ ๋ฒ„ํผ์˜ ์ฒซ ๋ฐ”์ดํŠธ์— '\0'์„ ๋‘”๋‹ค.)
a+
๋ง๋ถ™์ด๊ธฐ. ์ŠคํŠธ๋ฆผ์„ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ด๊ณ  ์ดˆ๊ธฐ ๋ฒ„ํผ ์œ„์น˜๋ฅผ ์ฒซ ๋„ ๋ฐ”์ดํŠธ ์œ„์น˜๋กœ ์„ค์ •ํ•œ๋‹ค.

์ŠคํŠธ๋ฆผ์— ํ˜„์žฌ ์œ„์น˜, ์ฆ‰ ๋‹ค์Œ I/O ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์œ„์น˜๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋‹ค. I/O ๋™์ž‘์—์„œ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋ฌต์‹œ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. fseek(3)์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๊ณ  ftell(3)๋กœ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋ง๋ถ™์ด๊ธฐ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ชจ๋“œ์—์„œ๋Š” ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ๋ฒ„ํผ ์‹œ์ž‘์ ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ๋ง๋ถ™์ด๊ธฐ ๋ชจ๋“œ์—์„œ ๋ฒ„ํผ ๋‚ด์— ๋„ ๋ฐ”์ดํŠธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ดˆ๊ธฐ ์œ„์น˜๊ฐ€ size+1์ด๋‹ค.

buf๋ฅผ NULL๋กœ ์ง€์ •ํ•˜๋ฉด fmemopen()์—์„œ size ๋ฐ”์ดํŠธ์˜ ๋ฒ„ํผ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ์ž„์‹œ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ ์„œ ๋‹ค์‹œ ์ฝ์–ด ๋“ค์ด๊ณ  ์‹ถ์€ ์‘์šฉ์—์„œ ์œ ์šฉํ•˜๋‹ค. ์ดˆ๊ธฐ ์œ„์น˜๋Š” ๋ฒ„ํผ ์‹œ์ž‘์ ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ๊ทธ ๋ฒ„ํผ๋Š” ์ŠคํŠธ๋ฆผ์ด ๋‹ซํž ๋•Œ ์ž๋™์œผ๋กœ ํ•ด์ œ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ ๊ทธ๋Ÿฐ ํ˜ธ์ถœ๋กœ ํ• ๋‹น๋œ ์ž„์‹œ ๋ฒ„ํผ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ํ˜ธ์ถœ์ž๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋‹ค. (open_memstream(3)๋„ ์ฐธ๊ณ .)

buf๊ฐ€ NULL์ด ์•„๋‹ˆ๋ฉด ํ˜ธ์ถœ์ž๊ฐ€ ํ• ๋‹นํ•œ ์ตœ์†Œ len ๋ฐ”์ดํŠธ์งœ๋ฆฌ ๋ฒ„ํผ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค.

์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์—ฐ ์ŠคํŠธ๋ฆผ์„ ํ”Œ๋Ÿฌ์‹œ(fflush(3)) ํ•˜๊ฑฐ๋‚˜ ๋‹ซ์„(fclose(3)) ๋•Œ ๋ฒ„ํผ ๋์— ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉด ๋„ ๋ฐ”์ดํŠธ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ ค๋ฉด ๋ฒ„ํผ์— ์—ฌ์œ  ๋ฐ”์ดํŠธ๊ฐ€ ์žˆ๋„๋ก (๊ทธ๋ฆฌ๊ณ  size๊ฐ€ ๊ทธ ๋ฐ”์ดํŠธ๊นŒ์ง€ ํฌํ•จํ•˜๋„๋ก) ํ˜ธ์ถœ์ž๊ฐ€ ์‹ ๊ฒฝ์จ ์ค˜์•ผ ํ•œ๋‹ค.

์ฝ๊ธฐ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์—ฐ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฒ„ํผ ๋‚ด์— ๋„ ๋ฐ”์ดํŠธ('\0')๊ฐ€ ์žˆ์–ด๋„ ์ฝ๊ธฐ ๋™์ž‘์ด ํŒŒ์ผ ๋ ํ‘œ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ˜„์žฌ ๋ฒ„ํผ ์œ„์น˜๊ฐ€ ๋ฒ„ํผ ์‹œ์ž‘์ ๋ถ€ํ„ฐ size ๋ฐ”์ดํŠธ๋ฅผ ์ง€๋‚  ๋•Œ๋งŒ ๋ฒ„ํผ ์ฝ๊ธฐ๊ฐ€ ํŒŒ์ผ ๋์„ ์•Œ๋ฆฐ๋‹ค.

์“ฐ๊ธฐ ๋™์ž‘์€ ํ˜„์žฌ ์œ„์น˜์—์„œ ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ (๋ง๋ถ™์ด๊ธฐ ์™ธ์˜ ๋ชจ๋“œ), ์ŠคํŠธ๋ฆผ์˜ ํ˜„์žฌ ํฌ๊ธฐ ์œ„์น˜์—์„œ ์ผ์–ด๋‚œ๋‹ค (๋ง๋ถ™์ด๊ธฐ ๋ชจ๋“œ).

๋ฒ„ํผ์— size ๋ฐ”์ดํŠธ๋ณด๋‹ค ๋งŽ์ด ์“ฐ๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋Ÿฐ ์˜ค๋ฅ˜๋Š” ๊ทธ stdio ๋ฒ„ํผ๋ฅผ ํ”Œ๋Ÿฌ์‹œ ํ–ˆ์„ ๋•Œ์—์•ผ (๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง„ ์ฑ„) ๋“œ๋Ÿฌ๋‚˜๊ฒŒ ๋œ๋‹ค. ๋‹ค์Œ ํ˜ธ์ถœ๋กœ ๋ฒ„ํผ๋ง์„ ๊บผ์„œ ์ถœ๋ ฅ ๋™์ž‘ ์‹œ์ ์— ์˜ค๋ฅ˜๋ฅผ ํƒ์ง€ํ•˜๋Š” ๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

setbuf(stream, NULL);

RETURN VALUE

์„ฑ๊ณต ์™„๋ฃŒ ์‹œ fmemopen()์€ FILE ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์•„๋‹ˆ๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋„๋ก errno๋ฅผ ์„ค์ •ํ•œ๋‹ค.

VERSIONS

glibc 1.0.x๋ถ€ํ„ฐ fmemopen()์ด ์ด๋ฏธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ–ˆ๋‹ค.

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
fmemopen() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Safe

CONFORMING TO

POSIX.1-2008. ์ด ํ•จ์ˆ˜๋Š” POSIX.1-2001์— ๋ช…์„ธ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๋“ค์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค.

POSIX.1-2008์—์„œ๋Š” mode์˜ 'b'๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์„ธํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์ˆ  ์ •์˜คํ‘œ 1์—์„œ ๊ทธ ๊ฒฝ์šฐ์— ๊ตฌํ˜„๋ณ„ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‘œ์ค€์„ ์กฐ์ •ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ glibc์˜ 'b' ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ํ—ˆ์šฉ๋œ๋‹ค.

NOTES

์ด ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์—๋Š” ์—ฐ๊ณ„๋œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์—†๋‹ค. (์ฆ‰ ๋ฐ˜ํ™˜๋œ ์ŠคํŠธ๋ฆผ์— fileno(3)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.)

๋ฒ„์ „ 2.22์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ(์•„๋ž˜ ์ฐธ๊ณ )๋ฅผ ์—†์• ๋ฉด์„œ fmemopen() ๊ตฌํ˜„์˜ ์˜ค๋ž˜๋œ ๋ฒ„๊ทธ๋“ค์ด ๊ณ ์ณ์กŒ์œผ๋ฉฐ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ์ƒˆ ๋ฒ„์ „ ์‹ฌ๋ณผ์ด ์ƒ๊ฒผ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ

2.9์—์„œ 2.21๊นŒ์ง€ glibc์˜ fmemopen() ๊ตฌํ˜„์—์„œ๋Š” "๋ฐ”์ด๋„ˆ๋ฆฌ" ๋ชจ๋“œ๋ฅผ ์ง€์›ํ–ˆ๋Š”๋ฐ mode์— ๋‘ ๋ฒˆ์งธ ๊ธ€์ž๋กœ 'b'๋ฅผ ์ง€์ •ํ•ด์„œ ๋ชจ๋“œ๋ฅผ ์ผฐ๋‹ค. ์ด ๋ชจ๋“œ์—์„œ๋Š” ์“ฐ๊ธฐ ์‹œ ๋ฌต์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ์šฉ ๋„ ๋ฐ”์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉฐ fseek(3) SEEK_END๊ฐ€ ํ˜„์žฌ ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฒ„ํผ ๋(์ฆ‰ size ์ธ์ž๋กœ ์ง€์ •ํ•œ ๊ฐ’)์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ ๊ตฌํ˜„์—๋Š” API ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด 'b'๊ฐ€ mode์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ˆ๋ฅผ ๋“ค์–ด "wb+"๋ผ๊ณ  ํ•˜๋ฉด ์›ํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ๋‚˜์ง€๋งŒ "w+b"๋ผ๊ณ  ํ•˜๋ฉด ๋‚˜์ง€ ์•Š๋Š”๋‹ค. fopen(3)์˜ mode ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค.

glibc 2.22์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ๊ฐ€ ์—†์–ด์กŒ๋‹ค. mode์— 'b'๋ฅผ ์ง€์ •ํ•ด๋„ ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†๋‹ค.

BUGS

glibc ๋ฒ„์ „ 2.22 ์ „์—์„œ, size๋ฅผ 0์œผ๋กœ ์ง€์ •ํ•˜๋ฉด fmemopen()์ด EINVAL ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์— ์ŠคํŠธ๋ฆผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๋‹ค์Œ ์ฒซ ๋ฒˆ์งธ ์ฝ๊ธฐ ์‹œ๋„์—์„œ ํŒŒ์ผ ๋์ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒŒ ๋” ์ผ๊ด€์ ์ผ ํ…๋ฐ, ๋ฒ„์ „ 2.22๋ถ€ํ„ฐ glibc ๊ตฌํ˜„์ด ๊ทธ๋Ÿฐ ๋™์ž‘ ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค.

glibc ๋ฒ„์ „ 2.22 ์ „์—์„œ, fmemopen()์— ๋ง๋ถ™์ด๊ธฐ ๋ชจ๋“œ("a"๋‚˜ "a+")๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ดˆ๊ธฐ ๋ฒ„ํผ ์œ„์น˜๋ฅผ ์ฒซ ๋„ ๋ฐ”์ดํŠธ ์œ„์น˜๋กœ ์„ค์ •ํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ (ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ŠคํŠธ๋ฆผ ๋์ด ์•„๋‹Œ ์œ„์น˜๋กœ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ) ์ดํ›„์˜ ์“ฐ๊ธฐ๊ฐ€ ์ŠคํŠธ๋ฆผ ๋์—์„œ ์ด๋ค„์ง€๋„๋ก ๊ฐ•์ œํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. glibc 2.22์—์„œ ์ด ๋ฒ„๊ทธ๊ฐ€ ๊ณ ์ณ์กŒ๋‹ค.

glibc ๋ฒ„์ „ 2.22 ์ „์—์„œ, fmemopen()์˜ mode ์ธ์ž๊ฐ€ ๋ง๋ถ™์ด๊ธฐ("a"๋‚˜ "a+")๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  size ์ธ์ž๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” buf ๋‚ด ๋ฒ”์œ„์— ๋„ ๋ฐ”์ดํŠธ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— POSIX.1-2008์— ๋”ฐ๋ฅด๋ฉด ์ดˆ๊ธฐ ๋ฒ„ํผ ์œ„์น˜๋ฅผ ๋ฒ„ํผ ๋ ๋‹ค์Œ ๋ฐ”์ดํŠธ ์œ„์น˜๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ์— glibc์˜ fmemopen()์—์„œ๋Š” ๋ฒ„ํผ ์œ„์น˜๋ฅผ -1๋กœ ์„ค์ •ํ•œ๋‹ค. glibc 2.22์—์„œ ์ด ๋ฒ„๊ทธ๊ฐ€ ๊ณ ์ณ์กŒ๋‹ค.

glibc ๋ฒ„์ „ 2.22 ์ „์—์„œ, fmemopen()์œผ๋กœ ๋งŒ๋“  ์ŠคํŠธ๋ฆผ์— whence ๊ฐ’์„ SEEK_END๋กœ ํ•ด์„œ fseek(3) ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ offset์„ ์ŠคํŠธ๋ฆผ ๋ ์œ„์น˜์— ๋”ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์น˜์—์„œ ๋บ๋‹ค. glibc 2.22์—์„œ ์ด ๋ฒ„๊ทธ๊ฐ€ ๊ณ ์ณ์กŒ๋‹ค.

glibc 2.9์—์„œ fmemopen()์— "๋ฐ”์ด๋„ˆ๋ฆฌ" ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ABI๊ฐ€ ์กฐ์šฉํžˆ ๋ฐ”๋€Œ์—ˆ๋‹ค. ๊ทธ ์ „์—๋Š” fmemopen()์—์„œ mode ๋‚ด์˜ 'b'๋ฅผ ๋ฌด์‹œํ–ˆ๋‹ค.

EXAMPLE

์•„๋ž˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” fmemopen()์„ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ ๋ฒ„ํผ๋ฅผ ์—ด๊ณ  open_memstream(3)์„ ์‚ฌ์šฉํ•ด ๋™์  ํฌ๊ธฐ ์ถœ๋ ฅ ๋ฒ„ํผ๋ฅผ ์—ฐ๋‹ค. (ํ”„๋กœ๊ทธ๋žจ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ นํ–‰ ์ธ์ž์—์„œ ๊ฐ€์ ธ์˜จ) ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•ด์„œ ์ •์ˆ˜๋“ค์„ ์ฝ์–ด ๋“ค์ด๊ณ , ๊ทธ ์ •์ˆ˜์˜ ์ œ๊ณฑ์„ ์ถœ๋ ฅ ๋ฒ„ํผ๋กœ ์จ๋„ฃ๋Š”๋‹ค. ๋‹ค์Œ์€ ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ถœ๋ ฅ ์˜ˆ์ด๋‹ค.

$ ./a.out '1 23 43'
size=11; ptr=1 529 1849

ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค

#define _GNU_SOURCE
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define handle_error(msg) \
    do { perror(msg); exit(EXIT_FAILURE); } while (0)

int
main(int argc, char *argv[])
{
    FILE *out, *in;
    int v, s;
    size_t size;
    char *ptr;

    if (argc != 2) {
        fprintf(stderr, "Usage: %s '<num>...'\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    in = fmemopen(argv[1], strlen(argv[1]), "r");
    if (in == NULL)
        handle_error("open_memstream");

    out = open_memstream(&ptr, &size);
    if (out == NULL)
        handle_error("open_memstream");

    for (;;) {
        s = fscanf(in, "%d", &v);
        if (s <= 0)
            break;

        s = fprintf(out, "%d ", v * v);
        if (s == -1)
            handle_error("fprintf");
    }

    fclose(in);
    fclose(out);

    printf("size=%zu; ptr=%s\n", size, ptr);

    free(ptr);
    exit(EXIT_SUCCESS);
}

SEE ALSO

fopen(3), fopencookie(3), open_memstream(3)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ