http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=146 [º¹»ç]
SEEK_CUR Àº Current ¿¡ ´ëÇÑ ÆÄÀÏ offset ¹èÄ¡¶ó´Â°ÍÀ» ¾Ë°í °è½Ã°ÚÁö¿ä.
ÇØ´ç file descriptor ¿¡ ´ëÇØ open() ¸¸ ¼öÇàÇÏ°í
±× ¿Ü¿¡ ¾Æ¹«·± ¼öÇàÀ» ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ lseek() ÀÇ °á°ú´Â 0 ÀÌ µË´Ï´Ù.
man lseek À» Çغ¸½Ã¸é lseek ÀÇ SEEK_CUR whence ¿¡ ´ëÇØ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÕ´Ï´Ù.
SEEK_CUR
The offset is set to its current location plus off-
set bytes.
Áï, ÇöÀç À§Ä¡¿¡ offset ¹ÙÀÌÆ®¸¦ Ç÷¯½ºÇÏ¿© ÇöÀç À§Ä¡ ¿ÀÇÁ¼ÂÀ» °áÁ¤ÇÕ´Ï´Ù.
SEEK_SET °ú ´Ù¸¥Á¡Àº
SEEK_SET Àº offset À¸·Î ÁÖ¾îÁø ¸¸Å À̵¿Çϴ°ÍÀÌ°í
SEEK_CUR Àº ÇöÀç À§Ä¡¿¡¼ offset À» plus ÇÑ ¸¸Å À̵¿ÇÕ´Ï´Ù.
open() ½Ã½ºÅÛ ÄÝ ¼öÇà Á÷ÈÄ ¿ÀÇÁ¼ÂÀº Ç×»ó ÃʱâÈ µÇ¾î ÀÖ´Â 0 À̸ç,
ÀÌ°ÍÀ» lseek() À» »ç¿ëÇØ °¢ À§Ä¡ ¿ÀÇÁ¼ÂÀ» ¿Å±æ¼ö ÀÖ½À´Ï´Ù.
½Ç ¿¹Á¦ ÀÔ´Ï´Ù.
[indra@indra test]$ cat test.txt
blahblah
[indra@indra test]$ cat a.c
#include <fcntl.h>
#include <stdio.h>
#define FNAME "test.txt"
int main()
{
off_t offs;
char *str = "indra";
int fd;
fd = open(FNAME, O_RDWR|O_APPEND);
write(fd, str, strlen(str));
offs = lseek(fd, 0, SEEK_CUR);
printf("SEEK_CUR: %d\n", offs);
offs = lseek(fd, 3, SEEK_CUR);
printf("SEEK_CUR: %d\n", offs);
close(fd);
return(0);
}
[indra@indra test]$ ./a
SEEK_CUR: 14
SEEK_CUR: 17
[indra@indra test]$ cat test.txt
blahblah
indra[indra@indra test]$
Âü°íÀûÀ¸·Î SEEK_END ¿¡ ´ëÇØ »çÁ·À» ºÙÀÌÀÚ¸é,
open(filename, O_RDWR|O_APPEND); ´Â
open(filename, O_RDWR);
lseek(fd, 0, SEEK_END); ¿Í °°½À´Ï´Ù.
±×¸®°í test code ¿¡¼ close() °¡ ºüÁ³³×¿ä.
test code ¶ó Çصµ ÆÄÀÏ ´Ù·ç½Ç¶§ ÀÛ¾÷ Á¾·á ÈÄ close() ¸¦ »ç¿ëÇϽô ½À°üÀ»
±â¸£´Â°ÍÀÌ ÁÁ½À´Ï´Ù.
Áñ°ø ÇϽñæ...
>Çб³¿¡¼ ½Ã½ºÅÛ ÇÁ·Î±×·¡¹ÖÀ̶õ´Â°É ¹è¿ì°íÀִµ¥.. @_@;; Á¦°¡ ¸Ó¸®°¡ ³ª»Û°ÇÁö Àß ¸ð¸£°Ú³»¿ä.
>
>#include<sys/types.h>
>#include<sys/stat.h>
>#include<fcntl.h>
>#include<string.h>
>#include<stdio.h>
>#include<unistd.h>
>
>int main(int argc, char * argv[])
>{
> off_t offset[2];
> char * buffer = "that's the way it is";
> int file = open(argv[1], O_RDWR | O_APPEND);
> offset[0] = lseek(file, 0, SEEK_CUR);
> write(file, buffer, strlen(buffer));
> offset[1] = lseek(file, 0, SEEK_CUR);
> printf("offset before writing: %ld\n", offset[0]); //ÆÄÀÏÀ» ¾²±â Àü¿¡ ¿É¼Â °ª
> printf("offset after writing: %ld", offset[1]); //ÆÄÀÏÀ» ¾²°í ³ ÈÄÀÇ ¿É¼Â °ª
> return 0;
>}
>
>
>Àú´Â
>open(argv[1], O_RDWR | O_APPEND) À¸·Î ¿°í ³ÈÄÀÇ ¿É¼ÂÀÇ °ªÀº ÆÄÀÏÀÇ ³¡À» °¡¸®Å°°í ÀÖ´Â °Í °°¾Æ È®ÀÎ »ï¾Æ ½ÇÇàÀ» Çغ¸¾Ò´õ´Ï
>
>
>[root@localhost practice]# ./a.out test
>offset before writing: 0
>offset after writing: 46
>
>
>ÀÌ·± °á°ú°¡ ³ª¿Ô½À´Ï´Ù.
>O_APPENDÀ» ÀÌ¿ëÇؼ openÇÔ¼ö¸¦ ¼öÇàÇصµ lseek(fd, 0, SEEK_CUR)ÀÇ °á°ú°ªÀº ÆÄÀÏÀ» ¾²±âÀü±îÁö´Â 0ÀÎÁö ±Ã±ÝÇÕ´Ï´Ù.
|
Hit : 6154 Date : 2003/10/13 06:06
|