.\" 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 ÇÏÁö¸¸ ÀÛ¼ºÇß½À´Ï´Ù.