.\" Copyright (c) Michael Smith
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR Ohttp://wafu.netgate.net/tama/unix/indexe.htmlTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/lib/libstand/libstand. 3, v 1.5. 2.10 2001/12/17 10:08:31 ru Exp %
.\"
.\" $FreeBSD: doc/ja_JP.eucJP/man/man3/libstand. 3, v 1.4 2002/05/18 07:12:55 horikawa Exp $
.Dd June 22, 1998
.Dt LIBSTAND 3
.Os
.Sh ¸íĪ
.Nm libstand
.Nd standalone ½ÇÇà¿ë ¼Æ÷Æ® ÇÁ·Î±×·¥ ¶óÀ̺귯¸®
.Sh ¼½Ä
.In stand.h
.Sh ÇØ¼³
.Nm libstand
(Àº)´Â, standalone ¾îÇø®ÄÉÀ̼ÇÀÇ ¼Æ÷Æ® ÇÔ¼ö±º°ú
Ç¥ÁØ
.Bx
ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÑ ¸ðÀÇ È¯°æÀ» °®Ãß°í ÀÖ½À´Ï´Ù.
ÈÄÀÇ ¼½¼ÇÀ¸·Î ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ Á¾·ù±¸ºÐ Çϰí ÀÖ½À´Ï´Ù.
¿©±â¿¡ ¸íÈ®ÇÑ Á¤Àǰ¡ ¾ø´Â °æ¿ì´Â, ÁöÁ¤ÀÇ ÇÔ¼öÀÇ ¼½¼Ç 3 ÀÇ
¸Þ´º¾ó ÆäÀÌÁöÀÇ ÇØ´ç °³¼Ò¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
.Sh ij¸¯ÅÍ ¶óÀÎ ÇÔ¼ö
»ç¿ëÇÒ ¼ö Àִ ij¸¯ÅÍ ¶óÀÎ ÇÔ¼ö´Â,
.Xr string 3
¹×
.Xr bstring 3
¿¡ ¾²¿©Á® ÀÖ½À´Ï´Ù.
.Sh ¸Þ¸ð¸® ¾ó·ÎÄÉÀ̼Ç
.Bl -hang -width 10n
.It Xo
.Ft "void *"
.Fn malloc "size_t size"
.Xc
.Pp
.Fa size
±×¸®°í ÁöÁ¤ÇÑ Å©±âÀÇ ¸Þ¸ð¸®¸¦ ÃÖÀûÀÎ ¾Ë°í¸®ÁòÀ¸·Î heap area·ÎºÎÅÍ ³ª´©¾î
¸ÂÈü´Ï´Ù.
.It Xo
.Ft void
.Fn free "void *ptr"
.Xc
.Pp
.Fa ptr
¿¡ ÇÒ´çÇÒ ¼ö ÀÖ¾ú´ø ¿ÀºêÁ§Æ®¸¦ ÇØ¹æÇÕ´Ï´Ù.
.It Xo
.Ft void
.Fn setheap "void *start" "void *limit"
.Xc
.Pp
heap area¸¦ ÃʱâÈÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â,
.Fn alloc
(À»)¸¦ ÃÖÃʷΠȣÃâÇϱâ Àü¿¡ ½ÇÇàÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
.Fa start
(¿Í)°ú
.Fa limit
ÀÇ »çÀÌÀÇ area°¡ heap area¿¡ »ç¿ëµË´Ï´Ù.
À̰ÍÀ» ³Ñ¾î ÇÒ´çÇÏ·Á°í Çϸé(ÀÚ) panic °¡ µË´Ï´Ù.
.It Xo
.Ft "char *"
.Fn sbrk "int junk"
.Xc
.Pp
.Fn sbrk 0
ÀÇ ¼ºÁúÀ» ÁÝ´Ï´Ù. Áï heap areaÀÇ ÃÖ°íÁ¤µµ ÁÖ¼ÒÀÇ Æ÷ÀÎÅ͸¦
µ¹·ÁÁÝ´Ï´Ù. ÀÌ ¹Ýȯ°ªÀº, Å×½ºÆ®½Ã¿¡ heapÀÇ ½Ç »ç¿ë »óȲÀ» ÆÇ´ÜÇϴµ¥
»ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Àμö
.Fa junk
(Àº)´Â ¹«½ÃµË´Ï´Ù.
.El
.Sh ȯ°æ
ÀüÅëÀûÀÎ ½© ¼Æ÷Æ® ȯ°æ¿¡ °°ÀÌ, Ç÷§ÀÎ º¯¼ö °ø°£ Á¶ÀÛÀ» À§Çؼ(¶§¹®¿¡)
ÇÑ ¹«¸®ÀÇ ÇÔ¼ö°¡ °®ÃçÁö°í ÀÖ½À´Ï´Ù. ÁÖµÈ È®ÀåÀ¸·Î¼ ÈÅ ÇÔ¼öÀÇ ¼³Á¤/¼³Á¤ ÇØÁ¦ÀÇ
À¯ÀÍÀÇ ¼Æ÷Æ®°¡ ÀÖ½À´Ï´Ù.
.Bl -hang -width 10n
.It Xo
.Ft "char *"
.Fn getenv "const char *name"
.Xc
.It Xo
.Ft int
.Fn setenv "const char *name" "char *value" "int overwrite"
.Xc
.It Xo
.Ft int
.Fn putenv "const char *string"
.Xc
.It Xo
.Ft int
.Fn unsetenv "const char *name"
.Xc
.Pp
ÀÌ·¯ÇÑ ÇÔ¼ö´Â, Ç¥ÁØ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿Í À¯»çÇÑ µ¿ÀÛÀ» ÇÕ´Ï´Ù.
.It Xo
.Ft "struct env_var *"
.Fn env_getenv "const char *name"
.Xc
.Pp
±× ȯ°æ³»¿¡¼ÀÇ º¯¼ö¸¦ °Ë»öÇØ, ¸ðµç µ¥ÀÌÅÍ ±¸Á¶¸¦ µ¹·ÁÁÝ´Ï´Ù.
.It Xo
.Ft int
.Fn env_setenv "const char *name" "int flags" "char *value" "ev_sethook_t sethook" "ev_unsethook_t unsethook"
.Xc
.Pp
.Fa name
±×·¸´Ù°í Çϴ ȯ°æ º¯¼öÀÇ ½Å±Ô ÀÛ¼º ¶Ç´Â ±âÁ¸ ȯ°æ º¯¼öÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
½Å±Ô º¯¼ö¸¦ »ý¼ºÇÏ´Â °æ¿ì´Â, Àμö
.Fa sethook
¹×
.Fa unsethook
(À»)¸¦ ÁöÁ¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
.Pp
EV_NOHOOK Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é, º¯¼ö ¼³Á¤À» ÇÏ·Á°í ÇÑ´Ù°í Çϸé(ÀÚ),
ÈÅÀÇ ¼³Á¤ÀÌ ¹Ýµå½Ã ±âµ¿µË´Ï´Ù. Åë»ó, Àμö
.Fa value
ÀÇ È®ÀÎÀ» ÇàÇØ, ½ÇÁ¦·Î °ªÀ» º¸Á¸Çϱâ À§Çؼ EV_NOHOOK º¯¼ö¸¦ ºÙ¿©, ÀçÂ÷
.Fn env_setenv
È£ÃâÀ» ½Ç½ÃÇØ ¼³Á¤ÇÕ´Ï´Ù. ¸ðµç º¯¼ö ¼³Á¤À» °ÅºÎÇϱâ À§Çؼ, Á¤Àǰ¡ ³¡³ ÇÔ¼ö
.Fn env_noset
(À»)¸¦ ÁöÁ¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
.Pp
¼³Á¤ ÇØÁ¦ ÈÅÀº, º¯¼öÀÇ ¼³Á¤ ÇØÁ¦¸¦ ÇÒ ¶§ ±âµ¿µË´Ï´Ù.
¹Ýȯ°ªÀÌ 0 ¶§, º¯¼öÀÇ ¼³Á¤ ÇØÁ¦µÇ°í ÀÖ½À´Ï´Ù. Á¤Àǰ¡ ³¡³ ÇÔ¼ö
.Fa env_nounset
(Àº)´Â, º¯¼ö ¼³Á¤ ÇØÁ¦¸¦ ¾ïÁ¦Çϴµ¥ »ç¿ëÇÕ´Ï´Ù.
.El
.Sh Ç¥ÁØ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ¼Æ÷Æ®
.Bl -hang -width 10n
.It Xo
.Ft int
.Fn getopt "int argc" "char * const *argv" "cont char *optstring"
.Xc
.It Xo
.Ft long
.Fn strtol "const char *nptr" "char **endptr" "int base"
.Xc
.It Xo
.Ft void
.Fn srandom "unsigned long seed"
.Xc
.It Xo
.Ft "unsigned long"
.Fn random void
.Xc
.It Xo
.Ft "char *"
.Fn strerror "int error"
.Xc
.Pp
.Nm
±×¸®°í ¼Æ÷Æ®µÇ°í ÀÖ´Â errno ÀÇ ºÎºÐÁýÇÕÄ¡¿¡ ´ëÀÀÇÑ´Ù
¿¡·¯ ¸Þ¼¼Áö¸¦ µ¹·ÁÁÝ´Ï´Ù.
.It Fn assert expression
.Pp
.In assert.h
ÇàÀÌ ÇÊ¿äÇÕ´Ï´Ù.
.It Xo
.Ft int
.Fn setjmp "jmp_buf env"
.Xc
.It Xo
.Ft void
.Fn longjmp "jmp_buf env" "int val"
.Xc
.Pp
Á¶ÀÛÇÒ ¼ö ÀÖ´Â ½Ã±×³Î »óŰ¡ ¾ø±â ¶§¹®¿¡, °¢°¢
.Fn _setjmp
¹×
.Fn _lonjmp
(À¸)·Î¼ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
.In setjmp.h
ÇàÀÌ ÇÊ¿äÇÕ´Ï´Ù.
.El
.Sh ij¸¯ÅÍ I/O
.Bl -hang -width 10n
.It Xo
.Ft void
.Fn gets "char *buf"
.Xc
.Pp
ij¸¯Å͸¦ ÄַܼκÎÅÍ
.Fa buf
¿¡ ÀоîµéÀÔ´Ï´Ù. Ç¥ÁØÀûÀÎ ÁÖÀÇ »çÇ×ÀÌ º»ÇÔ¼ö¿¡
´ëÇØ Àû¿ëµË´Ï´Ù.
.It Xo
.Ft void
.Fn ngets "char *buf" "size_t size"
.Xc
.Pp
.Fa size
-1 ¶Ç´Â ±×°Í ÀÌÇÏÀÇ Ä³¸¯Å͸¦ ÄַܼκÎÅÍ
.Fa buf
¿¡ ÀоîµéÀÔ´Ï´Ù. ÁÙ ³¡ ij¸¯ÅÍ´Â »èÁ¦µÇ¾î
¹öÆÛ´Â Ç×»ó ´ÀÌ Á¾´Ü ij¸¯ÅͰ¡ µË´Ï´Ù.
.Fa size
ÇÏÁö¸¸ 1 ÀÌÇÏÀÇ °æ¿ì, ÇÔ¼ö´Â
.Fn gets
(¿Í)°ú °°Àº µ¿ÀÛÀ» ÇÕ´Ï´Ù.
.It Xo
.Ft int
.Fn fgetstr "char *buf" "int size" "int fd"
.Xc
.Pp
ÀÏÇàÀ»
.Fa size
ij¸¯ÅÍ ÀÌÇÏÀÇ ¹üÀ§¿¡¼
.Fa buf
¿¡ ÀоîµéÀÔ´Ï´Ù. ÁÙ ³¡ÀÇ Ä³¸¯ÅÍ´Â Àß¶ó ¹ö¸± ¼ö ÀÖ¾î
¹öÆÛ´Â Ç×»ó ´ÀÌ Á¾´ÜÀÌ µË´Ï´Ù.
Á¤»ó Á¾·á ¶§´Â
.Fa buf
¾ÈÀÇ Ä³¸¯Åͼö¸¦ µ¹·ÁÁÖ¾î, read error ¶§´Â -1 À» µ¹·ÁÁÝ´Ï´Ù.
.It Xo
.Ft int
.Fn printf "const char *fmt" "..."
.Xc
.It Xo
.Ft void
.Fn vprintf "const char *fmt" "va_list ap"
.Xc
.It Xo
.Ft int
.Fn sprintf "char *buf" "const char *fmt" "..."
.Xc
.It Xo
.Ft void
.Fn vsprintf "char *buf" "const char *fmt" "va_list ap"
.Xc
.Pp
*printf ÇÔ¼ö´Â, Ç¥ÁØ
.Fn printf
ÆÐ¹Ð¸®ÀÇ ºÎºÐÁýÇÕ ±â´É ¹°¾î ±¸µÎÀΰ¡ÀÇ È®Àå ±â´ÉÀ» °®Ãß°í ÀÖ½À´Ï´Ù.
c, d, n, o, p, s, u, x ÀÇ Ç¥ÁØ º¯È¯ÀÌ ¼Æ÷Æ®µÇ°í ÀÖ½À´Ï´Ù.
+,-,#,*, 0, field width, precision, l ÀÇ ¼ö½ÄÀÚ°¡ ¼Æ÷Æ®µÇ°í ÀÖ½À´Ï´Ù.
.Pp
¿¡·¯ ·¹Áö½ºÅ͸¦ µðÄÚµåÇϱâ À§Çؼ
.Li b
º¯È¯ÀÌ °®ÃçÁö°í ÀÖ½À´Ï´Ù.
»ç¿ë¹ýÀº ÀÌÇÏ¿Í °°½À´Ï´Ù.
.Pp
.Bd -ragged -offset indent
printf(
.Qq reg=%b\en ,
regval,
.Qq *
);
.Ed
.Pp
.Aq Pa base
(Àº)´Â, Á¦¾î ij¸¯ÅÍÀÇ Ãâ·ÂÀ» Ç¥ÇöÇϰí ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é
\e10 ´Â 10 Áø¼ö¸¦, \e20 ´Â 16 Áø¼ö¸¦ ÀǹÌÇÕ´Ï´Ù. °¢
.Aq Pa arg
(Àº)´Â, ij¸¯ÅÍ ¶óÀÎÀ¸·Î, ÃÖÃÊÀÇ ÇÑ ±ÛÀÚ´Â ÀμöÀÇ ºñÆ®¼ö(Ãʰ¡ 1)·Î,
ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, ±× ÀÌÈÄÀÇ Ä³¸¯ÅÍ ¶óÀÎ(32 ij¸¯ÅÍ ¹Ì¸¸)Àº Ç¥½Ã ´ë»óÀÇ
ÅØ½ºÆ®ÀÔ´Ï´Ù. Áï,
.Pp
.Bd -ragged -offset indent
printf(
.Qq reg=%b\en
3
.Qq \e10\e2BITTWO\e1BITONE\en
);
.Ed
.Pp
¿¡ ÀÇÇØ Ãâ·Â Ç¥½ÃµË´Ï´Ù.
.Pp
.Bd -ragged -offset indent
reg=3
.Ed
.Pp
.Li D
º¯È¯Àº, 16 Áø¼ö ´ýÇÁÀÇ ±â´ÉÀ» °®Ãß°í ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î, ÀÌÇÏ.
.Pp
.Bd -ragged -offset indent
printf(
.Qq %6D ,
ptr,
.Qq \&:
); gives
.Qq XX:XX:XX:XX:XX:XX
.Ed
.Bd -ragged -offset indent
printf(
.Qq %*D ,
len,
ptr,
.Qq "\ "
); gives
.Qq XX XX XX ...
.Ed
.El
.Pp
.Sh ij¸¯ÅÍ Å×½ºÆ®¿Í º¯È¯
.Bl -hang -width 10n
.It Xo
.Ft int
.Fn isupper "int c"
.Xc
.It Xo
.Ft int
.Fn islower "int c"
.Xc
.It Xo
.Ft int
.Fn isspace "int c"
.Xc
.It Xo
.Ft int
.Fn isdigit "int c"
.Xc
.It Xo
.Ft int
.Fn isxdigit "int c"
.Xc
.It Xo
.Ft int
.Fn isascii "int c"
.Xc
.It Xo
.Ft int
.Fn isalpha "int c"
.Xc
.It Xo
.Ft int
.Fn toupper "int c"
.Xc
.It Xo
.Ft int
.Fn tolower "int c"
.Xc
.El
.Sh ÆÄÀÏ ÀÔÃâ·Â
.Bl -hang -width 10n
.It Xo
.Ft int
.Fn open "const char *path" "int flags"
.Xc
.Pp
.Xr open 2
ÀÇ µ¿ÀÛÀ» ´à¾Æ ÀÖ½À´Ï´Ù. ´Ù¸¸, ÆÄÀÏ ÀÛ¼º ±â´ÉÀÌ ¼Æ÷Æ®
µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡, ¸ðµå ÆÄ¶ó¹ÌÅÍ´Â ºÒÇÊ¿äÇÕ´Ï´Ù. Àμö
.Fa flags
¿¡´Â, O_RDONLY, O_WRONLY, O_RDWR ÀÇ ¾î¶² °ÍÀÎÁö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
(ºñ·Ï, ÇöÀç ±â·ÏÀ» ¼Æ÷Æ®ÇÏ´Â ÆÄÀÏ ½Ã½ºÅÛÀÌ ¾ø´Ù°í ÇØµµ)
.It Xo
.Ft int
.Fn close "int fd"
.Xc
.It Xo
.Ft void
.Fn closeall void
.Xc
.Pp
¸ðµç open µÇ°í ÀÖ´Â ÆÄÀÏÀ» ´Ý½À´Ï´Ù.
.It Xo
.Ft ssize_t
.Fn read "int fd" "void *buf" "size_t len"
.Xc
.It Xo
.Ft ssize_t
.Fn write "int fd" "void *buf" "size_t len"
.Xc
.Pp
(ÇöÀç ±âÀÔÀ» ¼·Î ¼Æ÷Æ®Çϰí ÀÖ´Â ÆÄÀÏ ½Ã½ºÅÛÀº ¾ø½À´Ï´Ù)
.It Xo
.Ft off_t
.Fn lseek "int fd" "off_t offset" "int whence"
.Xc
.Pp
ÀÐÀ» ÇÑÁß°£¿¡ ÀÚµ¿ÀûÀ¸·Î ÇØµ¿µÇ´Â ÆÄÀÏÀº, ÇöÀçÀÇ À§Ä¡¿¡¼ ÈĹæÀ¸·Î
seek ÇÒ ¼ö ¾ø½À´Ï´Ù.
.It Xo
.Ft int
.Fn stat "const char *path" "struct stat *sb"
.Xc
.It Xo
.Ft int
.Fn fstat "int fd" "struct stat *sb"
.Xc
.Pp
ÇÔ¼ö
.Fn stat
¹×
.Fn fstat
(Àº)´Â,
.Fa sb
±¸Á¶Ã¼ÀÇ Çʵå : st_mode, st_nlink, st_uid, st_gid, st_size
¿¡ÀÇ ±âÀÔ¸¸À» ÇÕ´Ï´Ù.
.Nm tftp
ÆÄÀÏ ½Ã½ºÅÛ¿¡¼´Â, ÀÌ ÇÔ¼öÀÇ È£ÃâÀº
Àǹ̰¡ ÀÖ´Â °ªÀÌ µÇÁö ¾Ê½À´Ï´Ù. ¶Ç
.Nm cd9660
ÆÄÀÏ ½Ã½ºÅÛÀº, ÆÄÀÏÀÇ uid/gid °¡ Ç×»ó 0 À̶ó°í
º¸°íÇØ ¿É´Ï´Ù.
.El
.Sh ÆäÀÌÀð
.Nm libstand
(Àº)´Â °£´ÜÇÑ ³»ºÎ ÆäÀÌÀ𸦠Á¦°øÇØ, Å« ¸í·ÉÀÇ Ãâ·ÂÀ» Àб⠽±°Ô ÇÕ´Ï´Ù.
.Bl -hang -width 10n
.It Xo
.Ft void
.Fn pager_open
.Xc
.Pp
ÆäÀÌÀ𸦠ÃʱâÈÇØ, ´ÙÀ½ÀÇ Ãâ·ÂÇàÀÌ Ç¥½ÃÀåÄ¡ÀÇ ¼±µÎÀÎ °ÍÀ» ¾Ë¸³´Ï´Ù.
ȯ°æ º¯¼ö LINES ´Â, ÇÑ ¹ø¿¡ Ç¥½Ã °¡´ÉÇÑ Çà¼ö¸¦ °áÁ¤ÇÒ ¶§¿¡ ÂüÁ¶µË´Ï´Ù.
.It Xo
.Ft void
.Fn pager_close void
.Xc
.Pp
ÆäÀÌÀ𸦠´Ý½À´Ï´Ù
.It Xo
.Ft int
.Fn pager_output "char *lines"
.Xc
.Pp
.Fa lines
±×¸®°í ÁöÁ¤µÈ, ´·Î Á¾·áÇÏ´Â ¹öÆÛÀÇ ÇàÀÌ ÆäÀÌÀð¿¡ º¸³»Áý´Ï´Ù.
°³Çà ij¸¯Å͸¦ ¼¼´Â °ÍÀ¸·Î, Ãâ·ÂµÇ´Â Çà¼ö°¡ Á¤ÇØÁý´Ï´Ù.
(Áï½Ã´Â Æ÷ÇÔÇÏÁö ¾Ê½À´Ï´Ù)
¸ðµç ÇàÀÌ Ãâ·ÂµÇ¸é(ÀÚ),
.Fn pager_output
(Àº)´Â 0 À» µ¹·ÁÁÝ´Ï´Ù. ȸé Ç¥½Ã°¡ Á¤ÁöÇØ, À¯Àú°¡ µµÁß Á¾·á¸¦
¼±ÅÃÇßÀ» ¶§´Â 0 ÀÌ¿ÜÀÇ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.
.It Xo
.Ft int
.Fn pager_file "char *fname"
.Xc
.Pp
ÆÄÀÏ
.Fa fname
(À»)¸¦ ¿¾î, ȸé Ç¥½ÃÇÕ´Ï´Ù. ¿¡·¯ ¶§´Â
-1 (À»)¸¦ µ¹·ÁÁÖ¾î, EOF ¶§´Â 0 À», À¯Àú°¡ Àб⸦ µµÁß Á¾·áÇÏ´Â °æ¿ì´Â
1 À» µ¹·ÁÁÝ´Ï´Ù.
.El
.Sh ±× ¿Ü
.Bl -hang -width 10n
.It Xo
.Ft void
.Fn twiddle void
.Xc
.Pp
¿¬¼Ó È£ÃâÀÇ °æ¿ì, À¯Àú°¡ È®ÀÎÇÒ ¼ö ÀÖµµ·Ï(µíÀÌ),
ij¸¯ÅÍ ¶óÀÎ |,/,-,\\ ÀÇ ÈÄ¿¡ ¹é ½ºÆäÀ̽º¸¦ ºÙ¿© Ãâ·ÂÇÕ´Ï´Ù.
.El
.Sh Àú·¹º§ ¼Æ÷Æ®ÀÇ ¿ä±¸
½ºÅÃ, heap, ÄܼÖ, µð¹ÙÀ̽º´Â,
.Nm libstand
±×¸®°í Àß »ç¿ëµÇ´Â ¸®¼Ò½ºÀÔ´Ï´Ù.
.Pp
½ºÅÃÀº,
.Nm libstand
ÇÔ¼ö°¡ ±âµ¿µÇ±â Àü¿¡ ±¸ÃàÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
½ºÅà ¿ä±¸´Â, ÇÔ¼ö³ª »ç¿ëµÇ°í ÀÖ´Â ÆÄÀÏ ½Ã½ºÅÛ, ¹×, ´ÙÀ½¿¡ »ó¼úÇÑ´Ù
¼Æ÷Æ® ·¹À̾î ÇÔ¼ö¿¡ ÀÇÇØ º¯ÈÇÕ´Ï´Ù.
.Pp
heap´Â,
.Fn alloc
ÇÔ¼ö³ª
.Fn open
ÇÔ¼öÀÇ È£Ãâ Àü¿¡,
.Fn setheap
È£ÃâÀ» ÇàÇØ ±¸ÃàÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. heapÀÇ »ç¿ë¹ýÀº, Ŭ¶óÀ̾ðÆ®ÀÇ
µ¿ÀÛ°ú °°ÀÌ, µ¿½Ã¿¡ open ÇÏ´Â ÆÄÀÏÀÇ ¼ö¿¡ ÀÇÇØ º¯ÈÇÕ´Ï´Ù. ÀÚµ¿ ÇØµ¿
¿Í ÆÄÀÏÀ» open ÇÒ ¶§¿¡ 64K ÀÌ»óÀÇ µ¥ÀÌÅ͸¦ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.
.Pp
ÄÜ¼Ö ¾×¼¼½º´Â, ÈļúÀÇ ÇÔ¼ö
.Fn getchar ,
.Fn putchar ,
.Fn ischar
¿¡ ÀÇÇØ ÇàÇØÁý´Ï´Ù.
.Pp
µð¹ÙÀ̽º ¾×¼¼½º´Â
.Fn devopen
¿¡ ÀÇÇØ ÃʱâȵǾî
.Fn devopen
ÇÏÁö¸¸ µ¹·ÁÁÖ´Â µð¹ÙÀ̽º ½ºÀÄ¡ ±¸Á¶Ã¼ÀÇ ÇÔ¼ö
.Fn dv_strategy ,
.Fn dv_ioctl ,
.Fn dv_close
¿¡ ÀÇÇØ ½ÇÇàµË´Ï´Ù.
.Pp
À¯Àú´Â ´ÙÀ½ÀÇ ¼Æ÷Æ® ÇÔ¼ö¸¦ ÁغñÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
.Bl -hang -width 10n
.It Xo
.Ft int
.Fn getchar void
.Xc
.Pp
ÄַܼκÎÅÍ, ÇÔ¼ö
.Fn gets ,
.Fn ngets
(ÀÌ)³ª ÆäÀÌÀð ÇÔ¼ö¿¡ ÀÇÇØ »ç¿ëµÇ´Â ij¸¯Å͸¦ µ¹·ÁÁÝ´Ï´Ù.
.It Xo
.Ft int
.Fn ischar void
.Xc
.Pp
ÄַܼκÎÅÍ ÀÔ·Â ±â´Ù¸®´Â »óÅ ¶§, 0 ÀÌ ¾Æ´Ñ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.
.It Xo
.Ft void
.Fn putchar int
.Xc
.Pp
Äֿܼ¡,
.Fn gets ,
.Fn ngets ,
.Fn *printf ,
.Fn panic ,
.Fn twiddle
¹×
´Ù¸¥ ¸¹Àº µð¹ö±×, Á¤º¸ ÅëÁö¿ëÀÇ ÇÔ¼ö°¡ »ç¿ëÇÏ´Â ¹®ÀÚ¸¦ ½á³À´Ï´Ù.
.It Xo
.Ft int
.Fn devopen "struct open_file *of" "const char *name" "char **file"
.Xc
.Pp
.Fa name
(ÀÌ)¶ó´Â À̸§ÀÇ ÆÄÀÏ¿ëÀÇ Àû´çÇÑ µð¹ÙÀ̽º¸¦ ¿¾î, µð¹ÙÀ̽º¸¦ ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù
ÆÄÀÏÀÇ ³ª¸ÓÁöÀÇ ºÎºÐÀÇ
.Fa name
(À»)¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦,
.Fa file
¿¡ µ¹·ÁÁÝ´Ï´Ù.
.Fa of
ÀÇ ±¸Á¶Ã¼ Çʵå
.Va f_dev
(Àº)´Â, Á¤»ó Á¾·áÇßÀ» °æ¿ì, open ÇÑ µð¹ÙÀ̽ºÀÇ
.Vt devsw
±¸Á¶Ã¼¸¦ °¡¸®Å°µµ·Ï(µíÀÌ) ¼¼Æ® µË´Ï´Ù.
µð¹ÙÀ̽º ½Äº°ÀÚ´Â, Ç×»ó ÆÐ½º ±¸¼ºÀÇ ¼±µÎ¿¡ ¿Â´Ù
Çʿ䰡 ÀÖ½À´Ï´Ù¸¸, ±× Àܴ̿ ÀÚÀ¯·Ó°Ô Æ÷¸Ë µÇ°í ÀÖ½À´Ï´Ù.
.Fn open
(ÀÌ)³ª
µð¹ÙÀ̽º °ü·ÃÀÇ I/O ·Î »ç¿ëµË´Ï´Ù.
.It Xo
.Ft int
.Fn devclose "struct open_file *of"
.Xc
.Fa of
¿¡ ÇÒ´çÇÒ ¼ö ÀÖ¾ú´ø µð¹ÙÀ̽º¸¦ ´Ý½À´Ï´Ù.
µð¹ÙÀ̽º µå¶óÀ̹ö-ÀÚ½ÅÀº Ŭ·Î¿ìÁî 󸮸¦ À§Çؼ(¶§¹®¿¡) ¹ú½á È£ÃâÀ» Çϰí ÀÖ¾î
ÀÌ È£ÃâÀº,
.Fn devopen
¿¡ ÀÇÇÑ ÇÒ´çÀ» ÇØÁ¦ÇÒ »ÓÀÔ´Ï´Ù.
.It Xo
.Ft void
.Fn panic "const char *msg" "..."
.Xc
.Pp
Ä¡¸íÀûÀ̾î ȸº¹ ºÒ´ÉÀÎ ¿¡·¯ »óŸ¦ ÅëÁöÇÕ´Ï´Ù. Àμö
.Fa msg ...
(Àº)´Â,
.Fn printf
ÀÇ °Í°ú °°½À´Ï´Ù.
.El
.Sh ³»ºÎ ÆÄÀÏ ½Ã½ºÅÛ
³»ºÎ ÆÄÀÏ ½Ã½ºÅÛ¿¡¼´Â,
.Vt struct fs_ops *file_system[]
ÀÇ ±¸Á¶Ã¼ÀÇ ¹è¿À», À¯Àú
ÇÏÁö¸¸ export ÇÒ ¼ö ÀÖ¾î ¹è¿Àº ±¸Á¶Ã¼
.Vt struct fs_ops
¿¡ÀÇ Æ÷ÀÎÅÍ·Î Ãʱâȵ˴ϴÙ.
ÀÌÇÏÀÇ ÆÄÀÏ ½Ã½ºÅÛ Çڵ鷯°¡
.Nm
¿¡
°®ÃçÁö°í ÀÖ½À´Ï´Ù¸¸, À¯Àú´Â ½º½º·Î ´Ù¸¥ ÆÄÀÏ ½Ã½ºÅÛÀ»
Á¦°øÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
.Bl -hang -width ".Va cd9660_fsops"
.It Va ufs_fsops
.Bx
ÀÇ UFS
.It Va ext2fs_fsops
Linux ÀÇ ext2fs ÆÄÀÏ ½Ã½ºÅÛ
.It tftp_fsops
TFTP °æÀ¯ÀÇ ÆÄÀÏ ¾×¼¼½º
.It Va nfs_fsops
NFS °æÀ¯ÀÇ ÆÄÀÏ ¾×¼¼½º
.It Va cd9660_fsops
ISO 9660 (CD-ROM) ÆÄÀÏ ½Ã½ºÅÛ
.It Va zipfs_fsops
ÆÄÀÏÀ» ¼Æ÷Æ®Çϰí ÀÖ´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ
gzip µÈ ÆÄÀÏÀ» ¼Æ÷Æ®ÇÏ´Â ½ºÅÃ
µÈ ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î, zipfs ÆÄÀÏ ½Ã½ºÅÛÀ» »ç¿ëÇÏ·Á°í Çϸé(ÀÚ),
.Nm libstand
(Àº)´Â ÆÄÀϸíÀÇ µÚ¿¡
.Li .gz
(À»)¸¦ ºÎ°¡ÇØ, ´õ¿í ´Ù¸¥ ÆÄÀÏ ½Ã½ºÅÛÀ» »ç¿ëÇØ ÆÄÀÏÀÇ À§Ä¡¸¦ °áÁ¤ÇÕ´Ï´Ù.
ÀÌ ÆÄÀÏ ½Ã½ºÅÛÀÇ, ¹è¿
.Va file_system[]
¿¡¼ÀÇ ¹èÄ¡¿¡ ÀÇÇØ,
non-gzipped ÆÄÀÏÀ» ÂüÁ¶Çϰí ÀÖ´Â gzipped ÆÄÀÏÀÌ
open µÇ´ÂÁö ¾î¶²Áö°¡ °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
gzip µÈ ÆÄÀÏÀº Àü¹æ¿¡ seek ÇÏ´Â °Í¸¸ÀÌ ÇÒ ¼ö ÀÖ¾î gzip µÈ ÆÄÀÏ¿¡ÀÇ
.Fn stat
¹×
.Fn fstat
(Àº)´Â, ±æÀÌÀÇ ºÎÁ¤À» º¸°íÇÕ´Ï´Ù.
.It Va bzipfs_fsops
.Va zipfs_fsops
(¿Í)°ú °°½À´Ï´Ù¸¸,
.Xr bzip2
±×¸®°í ¾ÐÃàµÈ ÆÄÀÏÀ» »ç¿ëÇÕ´Ï´Ù.
.El
.Pp
±¸Á¶Ã¼
.Vt struct fs_ops
ÀÇ Æ÷ÀÎÅÍ ¹è¿Àº ´·Î Á¾·áÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
.Sh µð¹ÙÀ̽º
µð¹ÙÀ̽º´Â, ´·Î Á¾·áÇÏ´Â µð¹ÙÀ̽º ½ºÀÄ¡ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ ¹è¿ÀÎ,
.Vt struct devsw *devsw[]
°æÀ¯ÀÇ ¼Æ÷Æ® Äڵ忡 ÀÇÇØ export µË´Ï´Ù.
.Sh ¹ö±×
»ó¼¼ÇÑ ¸Þ¸ð¸® »ç¿ë µ¥ÀÌÅͰ¡ ¾ø´Â °ÍÀº ºÒÄ£ÀýÇÕ´Ï´Ù.
.Pp
.Sh ¿ª»ç
.Nm libstand
(Àº)´Â ¸¹Àº ¼Ò½º¸¦ ÀÌ¿ëÇϰí ÀÖ½À´Ï´Ù. Áï,
.Bl -bullet -compact
.It
.Nx
(À¸)·ÎºÎÅÍÀÇ
.Nm libsa
.It
.Fx 3.0
(À¸)·ÎºÎÅÍÀÇ
.Nm libc
(¿Í)°ú
.Nm libkern
.It
.An Matthew Dillon Aq dillon@backplane.com
(À¸)·ÎºÎÅÍÀÇ
.Nm zalloc
.El
.Pp
À籸¼º°ú
.Fx 3.0
¿¡ÀÇ Æ÷Æ®, ȯ°æ º¯¼ö °ü°èÀÇ ÇÔ¼ö, ÀÌ ¸Þ´º¾ó ÆäÀÌÁö´Â
.An Mike Smith Aq msmith@FreeBSD.org
ÇÏÁö¸¸ ÀÛ¼ºÇß½À´Ï´Ù.