c언어 4

[C] C언어 멀티 프로세스 채팅 서버 만들기

지난번에 멀티 스레드 채팅 서버를 만든 적이 있다. (궁금하면 여기를 참고) 이번 포스팅은 멀티 프로세스 채팅 서버를 C로 구현해봤다. (사실 친구의 수업에서 진행하는 프로젝트인데 재미있어 보여서 따라 했다.) C언어 + fork의 조합 때문에 전체적인 코드가 길어지기 때문에 주요 로직에 대해서만 정리를 해야겠다. 서버 코드 서버의 코드에서 사용한 공유 메모리 종류이다. 전체적인 채팅 알고리즘을 아래와 같이 설계했다. - 메세지 헤더, 메세지 유저, 메세지 데이터에 해당하는 공유메모리 영역을 선언한다. - 메세지 헤더에는 현재 메세지의 번호가 담기며, 코드를 실행하면 0으로 초기화된다. - 메인 코드 : 클라이언트 들의 접속을 허가하고 fork를 통해 채팅 알고리즘을 수행하는 프로세스를 생성한다. - 채..

[C] C언어의 Stack_Frame

오늘은 스택 프레임에 대해 공부했다. 사실 이해하는데 정말 많은 시간이 걸렸는데 막상 공부하고 보니 그렇게 어려운 개념은 아닌 것 같다. 시작하기 전에.. 비주얼 스튜디오 2019를 통해 결과를 확인해보려 했는데, 디버그 옵션도 변경하고, 최적화 설정도 "사용 안 함"으로 바꿔줬는데 스택과 스택 사이에 예상하지 못한(?) 값이 계속 들어가서 아직도 실습을 못해보고 있다..ㅜ 제대로 된 설정을 찾게 되면 꼭 직접 테스트해보고 싶다. 아니면 우분투에서 GDB를 써서라도 꼭 확인해 볼 것이다. 스택 프레임 스택 프레임을 한 줄로 요약하자면, "함수 a가 호출되었을 때 그 함수가 가지는 공간(공간의 구조)"이다. 스택 영역을 함수가 어떻게 사용하는지 천천히 공부해보자. #include void func_a() ..

Computer_Language/C 2019.10.15

[C] 인덱스 검사(경계 검사)에 대하여

오늘은 인덱스 검사에 대해 공부를 했다. 많은 사람들이 경계 검사와 인덱스 검사를 혼용해서 사용하는데, 엄밀히 따지면 경계 검사가 더 포괄적인 단어이다. (통상적으로는 경계 검사를 인덱스 검사라고 부른다고 한다 - 참고) 오늘 공부한 내용은 경계 검사 중 인덱스 검사에 대해 공부를 했다. 인덱스 검사란 접근할 배열의 인덱스가 정의했던 경계 안에 존재하는지 확인하는 검사이다. C언어는 빠른 실행 속도를 위해 경계 검사를 자동으로 수행하지 않는다. 컴퓨터 언어를 공부한 지 1년 반만에 알았지만 중요한 개념이니 제대로 정리를 해보자. 프로그래밍을 글로 배우기는 쉽지 않으니 적절한 예시를 만들어보았다. #include int main() { int i, a[40]; for (i = 0; i < 40; i++) ..

Computer_Language/C 2019.08.31

[C] 위치를 기록하는 동안 액세스 위반이 발생했습니다. 에 관하여

C는 내가 처음으로 공부했던 컴퓨터 언어이다. 백준 문제도 많이 풀어보고, 게임을 만들거나 자료구조를 시각화하는 등 다양하게 코딩을 했던 것 같다. 오늘은 처음으로 C에 대해서 깊게 공부하게 되었던 "액세스 위반"에 대해 정리를 해보려고 한다. 1. 어떤 경우에 위반이 떴나? 내가 경험했던 경우는 두 가지이다. 1. 메모리 할당이 되지 않은 포인터를 잘못 사용할 경우. 2. 읽기 전용 메모리에 쓰기를 수행할 경우. 1번의 경우는 "할당되지 않은 메모리를 사용하려고 할 때"라고 표현해도 좋을 것 같다. 2. 직접 액세스 위반을 발생시켜보며 공부하자 먼저 "1. 메모리 할당이 되지 않은 포인터를 잘못 사용할 경우."에 대해 공부해보았다. 예제 1-1) 정상적인 오류가 없는 정상적인 코드이다. #include..

Computer_Language/C 2019.08.27