본문 바로가기
C/C++ memset() 메모리 블록을 채우는 함수 #include void *memset(void *dest, int c, size_t count); memset() 함수는 dest 포인터가 가리키는 곳부터 count 바이트만큼 값 c로 채운다. 값 c는 부호없는 문자(unsigned character)로 변환된다. 매개변수 void *dest : 채울 메모리 블록에 대한 포인터 int c : 설정할 값, 넘겨지는 값은 int이지만 부호없는 문자로 변환되어 메모리 블록에 채워진다 size_t count : 값으로 채워질 바이트(byte)의 수 반환값 dest에 대한 포인터를 반환 코드 예시 #include #include int main(void) { char buffer[256]; char *string; memset(buffer, 0, sizeof(.. 2021. 7. 4.
C/C++ fgets() 문자열 읽기 함수 #include char *fgets(char *string, int n, FILE *stream); fgets() 함수는 stream에서 문자열을 읽는다. 문자열을 읽을 때, 첫 번째 개행 문자를 포함하는 곳까지 읽거나, stream의 끝까지 읽거나, $n-1$개의 문자를 읽는다. 읽은 문자열을 string에 저장하고 끝에 \0을 추가한다. $n$이 1이면 빈 string이 된다. 매개변수 char *string : stream에서 읽은 문자열을 복사해 저장할 문자 배열에 대한 포인터 int n : string에 복사될 최대 문자 수 FILE *stream : FILE 객체에 대한 포인터, 인자로 stdin을 사용해 표준 입력(standard input)으로 부터 입력 받을 수 있다 반환값 함수 호출이.. 2021. 7. 4.
C/C++ gets() 행 읽기 함수 #include char *gets(char *buffer); gets() 함수는 표준 입력 스트림 stdin으로 행을 읽고 buffer에 저장한다. 함수가 행을 읽은 경우 개행 문자 \n을 null 문자 \0으로 대체한다. gets()를 사용하지 말고, fgets()를 사용하자. gets() 함수는 2011 standard에서 deprecated 되었고, 2014 standard에서 제거되었다. gets() 함수를 사용하는 것이 버퍼 오버플로우를 발생시킬 수 있는 위험이 있기 때문이다. gcc를 이용해 컴파일 할 경우 다음과 같은 경고 메시지가 나타난다: warning: the `gets' function is dangerous and should not be used. 반환값 함수 호출이 성공한 경우.. 2021. 7. 4.
C/C++ fprintf() 스트림에 형식 문자열 쓰기 #include int fprintf(FILE *stream, const char *format-string, argument-list); 형식 문자열 format-string을 넘겨 받아, 출력 stream에 문자열을 쓴다. 이때 출력 문자열과 argument-list는 printf() 함수와 같은 형식이다. 매개변수 FILE *stream : 형식 문자열을 쓸 파일 포인터 const char *format-string : 형식 문자열 argument-list : 형식 문자열에 사용할 인자 반환값 함수 호출이 성공한 경우 쓰여진 문자의 개수가 출력, 에러가 발생한 경우 음수가 반환 코드 예시 #include int main(void) { int i, j; FILE *stream = fopen("mydi.. 2021. 7. 4.
운영체제 인터페이스 이 글에서는 운영체제에 대해 간략히 알아보고, 운영체제 인터페이스(Operating Systems Interfaces)에 대해 알아본다. 책 xv6: a simple, Unix-like teaching operating system을 참고하여 정리한다. 운영체제는 다수의 프로그램이 컴퓨터라는 한정된 자원을 공유하도록 만든다. 또한, 저수준(low-level) 하드웨어를 추상화하고 관리한다. 따라서 인터넷 브라우저와 같은 프로그램은 구체적으로 어떤 하드웨어를 사용하고 있는지 신경쓸 필요가 없다. 운영체제가 알아서 어떤 하드웨어를 사용할지 관리해 준다. 운영체제는 또한 프로그램들이 서로 같이 일하거나 같은 데이터를 공유할 수 있도록 만든다. 운영체제는 인터페이스를 통해 사용자 프로그램(user program.. 2021. 7. 4.
메모리 영역 출력해서 알아보기 프로그램을 실행하면 운영체제는 메모리 공간을 제공하며, 메모리 공간은 낮은 주소부터 코드 영역, 데이터 영역, 힙 영역, 스택 영역을 할당한다. 코드 영역(code segment, text segment or text) 프로그램의 코드가 저장되는 영역이며, CPU는 코드 영역에 저장된 명령어를 가져와서 실행한다. 데이터 영역(data segment, or .data) 전역 변수(global variable)와 정적 변수(static)가 저장된다. 프로그램이 시작할 때 할당되며, 프로그램이 종료하면 소멸한다. 힙 영역(heap) 사용자(코드 작정자)가 메모리 공간을 동적으로 할당하고 해제한다. 힙 영역은 낮은 주소에서 높은 주소로 할당한다. 스택 영역(stack) 함수 호출과 함께 할당되며, 함수 호출이 .. 2021. 6. 28.
파이썬으로 살펴보는 아키텍처 패턴 이 글은 한빛미디어 도서 서평단 나는 리뷰어다 2021을 통해 책을 제공받아 작성하였습니다. 이 책은 번역서 '파이썬으로 살펴보는 아키텍처 패턴(Architecture Patterns with Python)(해리 퍼시벌, 밥 그레고리 지음, 오현석 옮김, 한빛미디어)' 입니다. 이 책은 파이썬을 이용해 엔터프라이즈 환경에서 개발할 때 사용할 수 있는 아키텍처 패턴에 대해 설명해 준다. 파이썬을 이용해 시스템을 구성하면서 점점 복잡해진 구조를 어떻게 설계하면 좋을지 설명해 준다. 그렇다고 해서 지나치게 이론에 집중해서 설명하는 것이 아닌 실제 예제 코드들을 보여주면서 실용적인 관점에서 학습할 수 있는 책이다.시스템의 복잡성을 해결하기 위해 테스트 주도 개발(TDD), 도메인 주도 개발(DDD), 마이크로 .. 2021. 6. 20.