2013년 5월 30일 목요일

FTP 다운로드 받을때 Permittion Deny 가 발생하는 경우


FTP 다운로드 받을때 Permittion Deny 가 발생하는 경우

1. 원본 파일에 read 권한이 없는 경우
2. 파일이 저장된 디렉토리의 write 권한이 없는 경우



chmod 로 파일 권한을 변경하거나,
chown 명령을 통해서 저장 디렉토리의 소유자를 root 에서 user 로 변경 처리한다.

VI를 이용한 개발 환경 만들기

VI를 이용한 개발 환경 만들기


1. VI 설정 

.vimrc 파일 ======================= 
syntax on
set title
set autoindent
        set si      "Smart indent
set background=light
"set nu
colo default
color evening
set shiftwidth=4
set ts=4
"map <F2> : w
map <F3> : 30vs ./           "seperate windows
map <F4> : P
"map <F2> : w
"map <F2> : w
"map <F2> : w


2. 

2013년 5월 22일 수요일

static 와 extern 의 차이


3.1 static


static(정적)함수는 소스 코드에서 은폐성을 높이기 위해 매우 중요한 요소이지만, 널리 알려져
있지 않은 단어라고 할 수 있다.


만약 2. 선언에 있는 소스코드 중에서 init.c의 코드의 정의를

static void init(){...}

와 같이 static을 붙이면 어떻게 될까? 그렇다 함수의 선언 및 정의에 static을 붙일 경우에는
해당 함수의 접근은 해당 파일내로 제한하게 된다. inic.c에 static을 붙이고 컴파일을 할 경우에

는 해당 함수가 정의되지 않았다는 메시지와 함께 에러가 발생하게 된다.

다시 말하면, 함수를 static으로 정의하면 그 파일 내에서만 통용되는 완전한 지역(local)함수로 

취급할 수 있으며, 아래와 같은 이점이 있다.

다른 파일과 함수명의 충돌이 있을지 걱정하지 않아도 된다.

다른 파일에서는 그 함수를 호출하지 않는 것이 보장된다.


3.2 extern


아래와 같은 함수가 있으면,
int Test(int i)
{
     return i;
}


함수 Test는 외부에 공개 되어있으며 다른 파일에서의 접근이 허용이 된다는 의미가 된다.

즉 외부함수 또는 전역함수라는 말이 된다.

만약 다른 소스파일에서 Test함수를 호출하려고 할때, 해당 파일 내에서는 함수 Test함수의 인

자와 반환형식을 알고 있어야되는데 이때 extern을 붙여주면 된다.
extern int Test(int i);
또는
int Test(int i); // extern 생략 가능

함수의 경우에는 default로 전역함수가 되므로 extern은 생략해도 된다.

3.3 변수에 대한 static & extern



변수의 경우에도 함수와 마찬가지로 파일 외부로 공개 유무에 따라서 static 또는 extern을 사용한다.


하지만 여기에는 함수에서 사용할때와는 조금 차이가 있으니 확인하도록 하자.


아래와 같이 함수내에서 static을 사용했을 경우에는 범위는 함수안에서만 유효범위가 된다. 함수 외부에서의 접근은 거부 된다. 
void Test()
{
    static int test_value = 0;
    int test = 1;
}

이외의 static이 붙은 변수와 함수내의 지역변수와의 차이점은 C언어 기본서를 참고하기 바란다.

함수외부에서 선언된 static변수의 경우는 해당 파일내로 접근 범위가 제한이 되며, 외부에서의 접근을


할 수 없다.
static int test = 1;
int GetValue()
{
return test;
}

void SetValue(int value)
{
test = value;
}


외부에서 접근이 제한되므로 Get/Set함수를 통해서 해당 변수를 제어하도록 하자.


변수의 경우도 extern을 선언함으로써 다른 파일에서 정의된 변수의 형식을 컴파일러에게 알려줄 수 있다.
extern int test;

int main()
{
printf("Value: %d\n", test);
return 0;
}


위와 같이 extern을 붙여 주어서 외부에 선언된 변수가 있다는 것을 알릴수 있다. 하지만 해당 변수에


static형일 경우에는 해당 변수를 발견할 수 없다는 메시지와 함께 에러가 발생하게 된다.


아래는 변수 공개의 예제 코드이다.


<test.c>
int test = 1;


<main.c>
#include <stdio.h>

extern int test;
int main(void)
{
printf("Test Value: %d\n", test);
return 0;
}


3.4 참고
변수

static: 변수 정의(파일 외부에 공개하지 않음)
없음: 변수 정의(파일 외부에 공개함)
extern: 변수 선언(정의는 없음)
함수 정의

static: 파일 외부에 공개하지 않음
없음: 파일 외부에 공개함
extern: 파일 외부에 공개함
함수의 원형 선언

static: 공개하지 않는 함수의 원형 선언(같은 파일내에)
없음: 공개하는 함수의 원형 선언
extern: 공개하는 함수의 원형 선언


< 참고: 쉽게 배우는 C프로그래밍 테크닉(p51) >

#if 1 #else #endif 를 이용하여 주석처리

#if 1 #else #endif 를 이용하여 주석처리


#if 1 /* new */
    rtn = Popen(command_path,"w", &status);
    if(rtn != 0)
    {
        memset(temp, 0, SIZE_32);
        sprintf(temp,"/tmp/%s",job_name);
        unlink(temp);
#ifdef DEBUG
PRINT(LOG_PRINTE, MSQ_CLI, -1)("there is not /user/bin/wrapper/scheduler_wrapper\n");
#endif
        return ABORT_FAILED;
    }

#else /* old */

    fd = popen(command_path,"w");
    i = pclose(fd);
    i = i >> 8;
#ifdef DEBUG
PRINT(LOG_PRINTE, MSQ_CLI, -1)("return value : %d\n",i);
#endif
    if(i == 127)
    {
        memset(temp, 0, SIZE_32);
        sprintf(temp,"/tmp/%s",job_name);
        unlink(temp);
#ifdef DEBUG
PRINT(LOG_PRINTE, MSQ_CLI, -1)("there is not /user/bin/wrapper/scheduler_wrapper\n");
#endif
        return ABORT_FAILED;
    }
#endif /* end */

* old 부분은 컴파일이 되지 않는다...
이것을 이용하면...프로그램밍 할때....예전것을 지우지 않고 할수 가 있따....
old 부분을 살리고 new를 주석 처리 하고 싶으면...
#if 1 이 부분을 0으로 하면 new가 주석처리 효과를 가지고 올수 있다...
프로그래밍 하기가 점점 쉬워지고 있는것 같다..ㅋㅋㅋ

#ifdef, #ifndef, #endif 에 대한 해석

#ifdef, #ifndef, #endif

C프로그램을 보면 위와 같은 전처리기를 많이 본다.

#ifdef DEBUG
~~~~~~~~~~~
#endif


그대로 해석하자면 DEBUG 가 #define 에 의해서 선언되어 있다면
~~~~~~~~~~~

를 실행해라! 라는 의미 입니다.


그리고 #ifndef 는 DEBUG 가 선언되어 있지 않으면 아래 내용을 실행해라..



일단 예제를 알려드리도록 하지요.

#define _DEBUG

#include <stdio.h>

void main()

{

#ifdef _DEBUG

printf("디버그 모드\n");

#endif

#ifndef_DEBUG
printf("일반 모드\n");

#endif

}

이렇게 쓰입니다.

실행을 해보셔서 #define _DEBUG 를 주석처리(// ) 시켜본것과 그냥 실행 시킨것과 비교해보시면 확연히 차이날것입니다.

[출처] #ifdef, #ifndef, #endif|작성자 maker dark98




2013년 5월 15일 수요일

2013년 5월 14일 화요일

Research for VoLTE overhead

Research for VoLTE overhead

Voice over IP - WLAN, 3G and LTE issues
http://www.mehrpouyan.info/Projects/Group%2013.pdf


Abstract—The aim of this paper is to give a basic introduction on VoIP- WLAN, 3G and LTE issues, and
thoroughly describe QoS, problems in different wireless network techniques and scenarios to get the best quality in real-time. The attention is focused on the Quality of Service in three different wireless networks, so, there will be proposed some solutions to improve these issues.