fseek(3)
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/09/10           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>fseek(3)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ½ÃÆ®¸²À§Ä¡ÀÇ ÀçÁöÁ¤ 
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <stdio.h> 
 
int fseek(FILE *stream, long offset, int whence); 
long ftell(FILE *stream); 
void rewind(FILE *stream); 
int fgetpos(FILE *stream, fpos_t *pos); 
int fsetpos(FILE *stream, fpos_t *pos); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        fseek()ÇÔ¼ö´Â <emphasis>stream</emphasis>¿¡¼­ÀÇ À§Ä¡¸¦ º¯°æÇϱâ À§Çؼ­  
        »ç¿ëÇÑ´Ù. »õ·Î¿î À§Ä¡´Â <emphasis>offset</emphasis>À» ÅëÇØ¼­  
        ¹ÙÀÌÆ® ´ÜÀ§·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À§Ä¡ º¯°æÀ» À§Çؼ­´Â ±âÁØÁ¡ÀÌ ÀÖ¾î¾ß ÇҰǵ¥,  
        ÀÌ´Â <emphasis>whence</emphasis>¸¦ ÀÌ¿ëÇØ¼­ °áÁ¤ÇÒ ¼ö ÀÖ´Ù.  
        whence´Â À§Ä¡º¯°æÀ» À§ÇÑ ±âÁØÁ¡¿¡ µû¶ó¼­ <emphasis>SEEK_SET</emphasis> 
        <emphasis>SEEK_CUR</emphasis>, <emphasis>SEEK_END</emphasis>°¡ ÀÖ´Ù.  
        SEEK_SET´Â ½ÃÀÛÁ¡À», SEEK_CURÀº ÇöÀç ½ºÆ®¸²¿¡¼­ÀÇ À§Ä¡¸¦, SEEK_END´Â  
        ½ºÆ®¸²ÀÇ ¸¶Áö¸·Á¡À» ±âÁØÀ¸·Î ÇÑ´Ù.  
    </para> 
    <para> 
        ftell()ÇÔ¼ö´Â <emphasis>stream</emphasis>¿¡¼­ÀÇ ÇöÀç À§Ä¡¸¦ ±¸Ç챉  
        À§Çؼ­ »ç¿ëÇÑ´Ù.     
    </para> 
    <para> 
        rewind()ÇÔ¼ö´Â <emphasis>stream</emphasis>¿¡¼­ÀÇ À§Ä¡¸¦ óÀ½À¸·Î µÇµ¹¸®±â 
        À§Çؼ­ »ç¿ëÇÑ´Ù. rewind()´Â fseek()¸¦ ÀÌ¿ëÇØ¼­ µ¿ÀÏÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù. 
        <screen> 
(void)fseek(stream, 0L, SEEK_SET) 
        </screen> 
        fgetpos()¿Í fsetpos()´Â ftell()°ú fseek()ÀÇ Á¶ÇÕ(whence´Â SEEK_SET)ÀÌ´Ù.  
        Áï À§Ä¡¸¦ º¯°æÇϰí ÇöÀçÀÇ À§Ä¡°ªÀ» fpost_t °´Ã¼¿¡ µÇµ¹·ÁÁØ´Ù.  
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        rewind()ÇÔ¼ö´Â ¾Æ¹«°Íµµ µÇµ¹·ÁÁÖÁö ¾Ê´Â´Ù. fgetpos(), fseek(), fsetpos()´Â 
        0À» ftell()´Â ÇöÀç À§Ä¡¸¦ µÇµ¹·ÁÁØ´Ù. ½ÇÆÐÇßÀ» °æ¿ì¿¡´Â -1À» ¸®ÅÏÇÑ´Ù.  
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        <variablelist>     
            <varlistentry> 
            <term>EBADF</term>     
            <listitem> 
                <para>     
                    <emphasis>stream</emphasis>ÀÌ À§Ä¡¸¦ Á¤ÇÒ ¼ö ¾ø´Â ½ºÆ®¸²ÀÌ´Ù.  
                    STDOUT, STDINÀÌ ´ëÇ¥ÀûÀÎ À§Ä¡¸¦ Á¤ÇÒ ¼ö ¾ø´Â ½ºÆ®¸²ÀÌ´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EINVAL</term>     
            <listitem> 
                <para>     
                    <emphasis>whence</emphasis>ÀÎÀÚ°¡ SEEK_SET, SEEK_END, SEEK_CURÀÌ ¾Æ´Ñ 
                    °ªÀ» »ç¿ëÇß´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EINTR</term>     
            <listitem> 
                <para>     
                    ½Ã½ºÅÛ È£ÃâÀÌ ÀÎÅÍ·´Æ® µÇ¾ú´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
 
int main(int argc, char **argv) 
{ 
    FILE *fp; 
    char buf[256]; 
    char gline[12]; 
    int linenum = 0; 
    int inputline; 
    int *line_index; 
 
    fp = fopen(argv[1], "r"); 
    if (fp == NULL) 
    { 
        perror("open error"); 
        return 1; 
    } 
 
    // ¶óÀÎÀÇ °¹¼ö¸¦ °è»êÇÑ´Ù.  
    while(fgets(buf, 255, fp) != NULL) 
    { 
        if (buf[strlen(buf)-1] == '\n') 
            linenum++; 
    } 
    // ¶óÀÎÀÇ °¹¼ö¸¸Å­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù.  
    // line_index ¹è¿­¿¡´Â °¢ ¶óÀÎÀÇ À§Ä¡°¡ µé¾î°£´Ù.  
    line_index = (int *)malloc(sizeof(int) * linenum +1); 
 
    // ½ºÆ®¸²À» óÀ½À¸·Î µÇµ¹¸°´Ù.  
    rewind(fp); 
 
    linenum = 0; 
 
    // ÆÄÀÏÀÇ Ã³À½ºÎÅÍ µ¹¸é¼­  
    // ftell()À» ÀÌ¿ë °¢ ¶óÀÎÀÇ À§Ä¡(offset)¸¦ ÀúÀåÇÑ´Ù. 
    line_index[0] = 0; 
    while(fgets(buf, 255, fp) != NULL) 
    { 
        // »ç½ÇÀº ¶óÀÎÀÇ Å©±â°¡ 255¸¦ ÃʰúÇÒ °æ¿ì ÀÌ¿¡ ´ëÇÑ  
        // ´ëÃ¥À» ¸¶·ÃÇØ¾ß ÇÏÁö¸¸ ±ÍÂúÀº °ü°è·Î ³Ñ¾î°£´Ù. 
        if (buf[strlen(buf)-1] == '\n') 
        { 
            line_index[linenum+1] = ftell(fp); 
            linenum ++; 
        } 
    } 
 
    printf("Line num is %d\n", linenum); 
    // ¶óÀÎ ¹øÈ£¸¦ ÀÔ·ÂÇϸé ÇØ´ç ¶óÀÎÀ¸·Î  
    // fseek()ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Á¡ÇÁÇÏ°í ¶óÀÎÀÇ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù. 
    while(1) 
    { 
        printf("Goto Line : "); 
        fgets(gline, 11, stdin); 
        gline[strlen(gline) - 1] = '\0'; 
        inputline = atoi(gline); 
        if (inputline < linenum && inputline > -1) 
        { 
            fseek(fp, line_index[inputline], SEEK_SET); 
            fgets(buf, 255, fp); 
            printf("%d(%d) : %s", inputline, line_index[inputline],buf); 
        } 
        else 
        { 
            printf("input num Error (0 - %d)\n", linenum-1); 
        } 
        printf("\n"); 
    } 
} 
        </screen> 
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
                lseek(2)     
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_seek">seek¸¦ ÀÌ¿ëÇÑ ÆÄÀÏ À§Ä¡ º¯°æ</ulink> 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.