Backend/C

Memmove

petitCoding 2012. 4. 12. 10:11

너무 오랫만에 쓰는 C언어 포스팅이넹..

오늘 개발 하다가.. memmove라는 함수를 사용하게 되었는데

까먹지 않기 위해서^^; 급 포스팅!!

 

사실 memory 관련 함수는 memcmp, memcpy  등만 사용했는데 이번에 memmove라는 함수도 있다는걸 알았다.

우선 MAN 페이지를 보면.. 다음과 같이 나온다

 

NAME
       memmove - copy memory area

SYNOPSIS
       #include <string.h>

       void *memmove(void *dest, const void *src, size_t n);

DESCRIPTION
       The  memmove()  function  copies n bytes from memory area src to memory

       area dest. The memory areas may overlap: copying takes place as though the

       bytes in src are first copied into a temporary array that does not overlap src or

       dst, and the bytes are then copied from the temporary array to dest.

RETURN VALUE
       The memmove() function returns a pointer to dest.

CONFORMING TO
       SVr4, 4.3BSD, C89, C99, POSIX.1-2001.

SEE ALSO
       bcopy(3), memccpy(3), memcpy(3), strcpy(3), strncpy(3), wmemmove(3)

 

 

아주 쉽게 말해서 메모리를 복사하되, 그로 인해 겹쳐지는 메모리에 대해서 안전성을 보장해 준다는 뜻이다.

예를 들어 다음 예문을 보면,

 

 

int main(void)
{
    char buf[1024] = "GLORIABESTSHARE";
    char buf2[128] = "*****";

    memmove(buf + 6 + 5, buf + 6 + 4, 5);
    memcpy(buf + 6, buf2, 5);
    printf("buf : %s\n", buf);

    return 0;
}      

 

> 결과

 

buf : GLORIA*****SHARE

 

BEST 부분이 * 다섯개로 바뀐 것을 볼 수 있다.

원래 memcpy만 사용하면,  다음처럼,

buf : GLORIA*****HARE

앞의 S까지 짤리게 되는데

 

memmove는 그런 상황을 방지해 준다.

memmove의 소스는 커널의 /lib/string.c 에서 볼 수 있다.

 

'Backend > C' 카테고리의 다른 글

About C Language  (0) 2012.04.12
glib의 간단한 사용법  (0) 2012.04.12
valgrind  (0) 2011.05.26
gprof  (0) 2011.05.26
GDB  (0) 2011.05.26