본문 바로가기

Embedded Programming29

리눅스 기반 서버프로그램 #include #include #include #include #include #include int main() { int servSock; int clntSock; int iRet; struct sockaddr_in echoServAddr; struct sockaddr_in echoClntAddr; unsigned short echoServPort; // server app port address unsigned int clntLen; unsigned char ucBuffer[500]; echoServPort = 9999; // 서버의 포트주소는 대부분 고정시킴 // 1. 소켓 생성 servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (servSoc.. 2013. 6. 17.
연산자 우선순위와 결합방향 연산자 우선순위란, 같은 항에서 연산자가 겹쳤을 때 어느 연산자가 가장 우선권을 갖고 먼저 처리하느냐를 정해놓은 것이다.이러한 우선순위를 굳이 달달 외울 필요는 없지만, 우선순위가 적용되어 처리되는 경우가 간간이 있으므로연산자간 우선순위가 있다는 정도만이라도 알아두면 좋을 것 같다. 순위 연산기호 연산자 결합방향 1 () 함수호출 → [] 배열 인덱스 -> 간접지정(구조체 멤버) . 직접지정(구조체 멤버) ++, -- (변수 뒤에서 증가/감소) 후위증가/감소 2 ++, -- (변수 앞에서 증가/감소) 전위증가/감소 ← sizeof 바이트 단위 크기 계산 ~ 비트단위 NOT연산 (비트 반전) ! 논리 NOT -, + 부호 연산(음수, 양수 표현) & 주소 연산 * 간접지정 연산 (포인터) 3 (자료형) 자.. 2013. 4. 27.
포인터의 증감연산과 포인터의 자료형 #include int main() { int i = 0; char c = 'a'; int *ip = &i; char *cp = &c; printf("ip -> i cp -> c\n"); printf("ip : %p ip + 1 : %p\n", ip, ip+1); printf("cp : %p cp + 1 : %p\n\n", cp, cp+1); ip = &c; cp = &i; printf("ip -> c cp -> i\n"); printf("ip : %p ip + 1 : %p\n", ip, ip+1); printf("cp : %p cp + 1 : %p\n", cp, cp+1); return 0; } 위의 예제에서 보면 int 형 포인터 ip와 char형 포인터 cp는 같은 "포인터 변수" 이.. 2013. 4. 21.
volatile 변수의 쓰임 volatile 키워드는 한 마디로 얘기하면 컴파일러가 메모리 접근을 최소화 시키는 최적화를 하지 못하게 막는 예약어이다. 의미없는 반복문 같은 경우는 컴파일러에 따라서 캐쉬 메모리를 이용한다던가 레지스터 내에서 모든 연산을 마치고 값을 다시 메모리로 계산값을 메모리(즉, 변수)에 저장하는 최적화를 진행한다. volatile은 이러한 최적화를 금지하고 FM대로 메모리에 접근하고 레지스터로 이를 읽어와 연산 후 메모리로 다시 저장시키는 방식으로 처리하라는 선언이다.volatile 선언은 크게 두 가지 의미가 있다.첫째는 컴파일러가 코드를 최적화시키는 것을 방지하겠다는 것이다. int main() { volatile unsigned int iCount = 0; *((volatile unsigned int *.. 2013. 4. 11.