syscall(2)
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>syscall(2)



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/06/02           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>syscall(2)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ÇöÀç ½Ã°£À» °¡Á®¿À°í ½Ã½ºÅÛÀÇ ½Ã°£°ªÀ» ¼³Á¤ÇÑ´Ù. 
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <sys/syscall.h> 
#include <unistd.h> 
 
int syscall(int number, ...);  
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        syscall()Àº ½Ã½ºÅÛ È£ÃâÀÇ ¾î¼Àºí¸® ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ù¹øÂ° ÀÎÀÚ´Â  
        ½Ã½ºÅÛ ÄÝ ¹øÈ£À̸ç, ±× ´ÙÀ½À¸·Î °¢ ½Ã½ºÅÛÄÝÀÇ ÀÎÀÚ°¡ ÀԷµȴÙ. 
        ½Ã½ºÅÛ ÄÝ ¹øÈ£´Â <ulink ulink="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_linux_systemcall_quick_reference"> 
        Linux ½Ã½ºÅÛÄÝ ·¹ÆÛ·±½º</ulink>¸¦ Âü°íÇϱ⠹ٶõ´Ù.  
        syscall()À» »ç¿ëÇÒ¶§ ½Ã½ºÅÛ ÄÝ ¹øÈ£¸¦ Á÷Á¢ÀÔ·ÂÇÏ´Â °ÍÀº ±ÍÂúÀº  
        ÀÛ¾÷Àε¥, °¢ ½Ã½ºÅÛ ÄÝ¿¡ ´ëÇØ¼­ sys/syscall.h ¿¡ Á¤ÀǵǾî ÀÖÀ¸´Ï  
        Âü°íÇϱ⠹ٶõ´Ù. <emphasis>SYS_systemcall</emphasis>½ÄÀ¸·Î Á¤ÀÇµÇ¾î  
        ÀÖ´Ù. ¿¹¸¦µé¾î open()½Ã½ºÅÛ È£ÃâÀ» »ç¿ëÇϱ⠿øÇÑ´Ù¸é  
        syscall(SYS_open,...)½ÄÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù.   
    </para> 
    <para> 
        ¿ª»çÀûÀ¸·Î syscall()Àº BSD4.0¿¡ ÀÇÇØ¼­ »ç¿ëµÇ¾îÁ³´Ù. 
    </para> 
</section> 
 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        ¹Ýȯ°ªÀº ½Ã½ºÅÛ ÄÝÀÇ ¸®ÅÏ Á¤Ã¥¿¡ µû¶ó¼­ ´Þ¶óÁø´Ù. ÀϹÝÀûÀ¸·Î  
        ¼º°øÇß´Ù¸é 0, ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é -1ÀÌ ¸®ÅϵȴÙ. ¿¡·¯ ÄÚµå´Â  
        <emphasis>errno</emphasis>¿¡ ÀúÀåµÈ´Ù. 
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
#include <syscall.h>  
#include <unistd.h> 
#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <string.h> 
 
#define BUF_SIZE 256 
int main() 
{ 
    int fd; 
    int n; 
    char buf[BUF_SIZE]; 
    // ½Ã½ºÅÛÄÝÀÇ Á÷Á¢ »ç¿ë   
    // ½Ã½ºÅÛÄÝ ¹øÈ£ : 20 
    fd = syscall(SYS_open, "syscall.c", O_RDONLY); 
    if (fd < 0) 
    { 
        perror("Open Syscall Error "); 
        exit(0); 
    } 
    while((n = syscall(SYS_read, fd, buf,BUF_SIZE - 1)) > 0) 
    { 
        syscall(SYS_write, 1, buf, n); 
        memset(buf, 0x00, BUF_SIZE); 
    } 
 
    syscall(SYS_close); 
    return (0); 
} 
        </screen> 
        À§ ÇÁ·Î±×·¥Àº ÆÄÀÏÀÇ ³»¿ëÀ» Àо Ãâ·ÂÇÏ´Â ÀÏÀ»ÇÑ´Ù. open(), read(),  
        write(), close()¿Í °°Àº ÁÖ¿ä ½Ã½ºÅÛ È£ÃâÀ» syscall()À» ÅëÇØ¼­ ±¸ÇöÇß´Ù.  
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
            <ulink ulink="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_linux_systemcall_quick_reference"> 
            Linux ½Ã½ºÅÛÄÝ ·¹ÆÛ·±½º</ulink> 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.