함수

    [C] open, close, read 함수에 대하여

    파일 디스크립터(File Descriptor)란? 리눅스와 유닉스에서는 시스템을 전부 파일로 처리하여 관리한다. (하드웨어 등 모든 장치도 포함) 시스템에서 프로세스가 파일에 접근하기 위한 방법으로 파일 디스크립터(FIle Descriptor)라는 핸들이 필요하다. 해당 파일을 open할때( 해당파일에 접근할 때 ) 파일 디스크립터는 0부터 N까지 즉, 음수가 아닌 0부터 차례대로 숫자를 부여받으며, 0, 1, 2는 프로세스가 메모리에서 실행을 시작할때 기본적으로 할당되는 파일 디스크립터이다. 기본적으로 할당받는 파일 디스크립터 0번 : 표준 입력(Standard Input) / STDIN_FILENO 1번 : 표준 출력(Standard Output) / STDOUT_FILENO 2번 : 표준 에러(St..

    [C++] 배열 초기화, 벡터 초기화, fill 함수

    C++에서 배열을 선언하고 초기화를 해주지 않으면 배열은 쓰레기 값으로 채워져있다. 아래의 코드를 실행해보면 #include using namespace std; int main() { int arr[5]; for (int i = 0; i < 5; i++) { cout

    [C] gets 함수는 사용하지 말아야 한다.

    프로그래밍을 하는 고수 프로그래머의 대부분(아니 거의 전부) 는 다들 gets 함수를 사용하지 말라고 조언한다. 그 이유에 대해서 1988년 엄청난 피해를 입혔던 모리스 웜(Morris Worm) 에 대해 언급하고자 한다. 컴퓨터 해킹의 역사에서 엄청나게 굵고 큰 한 획을 그었던 Morris Worm 의 컴퓨터 파괴 원리는 바로 버퍼 오버플로우이다. 요즘의 언어인 JAVA나 Python 같은 언어는 메모리를 자체적으로 관리하기 때문에 버퍼 오버플로우에 대해서는 안전할 수 있겠지만, 프로그래머에게 엄청난 자유를 선사하는 어셈블리어, C, C++ 등은 시스템에 매우 밀접하게 동작하므로 버퍼 오버플로우에 대한 고려를 프로그래머가 직접 해야 한다. Morris Worm은 바로 C 언어의 표준 함수 중 버퍼 오버..

    [C] 문자열에서 공백을 제거하는 함수

    문자열 중앙에 있는 공백도 제거하는 함수가 필요해서 만들었다. 아래의 DeleteSpace함수는 인수로 받는 문자열에서 문자열에서 앞, 뒤, 가운데에 있는 모든 공백을 제거해서 제거된 문자열을 반환하는 함수다. 사용법: char *str = DeleteSpace("공백이 있는 문자열"); char str[] = DeleteSpace("공백이 있는 문자열"); #include #include char* DeleteSpace(char s[]) { char* str = (char*)malloc(sizeof(s)); int i, k = 0; for (i = 0; i < strlen(s); i++) if (s[i] != ' ') str[k++] = s[i]; str[k] = '\0'; return str; } i..

    [Unity] 이벤트 함수는 어떻게 실행되는 것일까?

    유니티엔진에서 ‘스크립트’를 작성한다고 하면, 보통 MonoBahaviour를 상속받는 클래스의 스크립트를 작성하는 것을 떠올릴 것이다. 그리고 자연스럽게 이 클래스 내에 Awake(), Start(), Update() 등의 메소드를 작성하게 된다. 심지어 비주얼 스튜디오 같은 개발 환경에서는 이런 메소드들에 대해 자동 완성도 해주고, 메소드 위에는 Unity 메시지라는 글자도 띄워준다. 이런 메소드들은 ‘Unity Event Function’, ‘Unity Message’ 또는 ‘Magic Method’라고 불린다. 그런데 생각해보면 이 메소드들은 MonoBehaviour 또는 그 부모 클래스로부터 상속받은 메소드도 아닌데, 어떻게 유니티가 알아서 찾아 적절한 타이밍에 호출해줄 수 있는 걸까? Send..

    C# 날짜 관련 함수(DateTime)

    시간을 표현하는 방법 DateTime now; // 날짜 변수 now선언 now = DateTime.Now; // 현재시간 Console.WriteLine(now); // 현재시간 Console.WriteLine(now.Year); // 현재 년도를 보여줌 Console.WriteLine(now.Month); // 현재 월을 보여줌 Console.WriteLine(now.Day); // 현재 일을 보여줌 Console.WriteLine(now.DayOfWeek); // 현재 몇 주인지 보여줌 Console.WriteLine(now.DayOfYear); // 1년중 몇일째인지 보여줌 Console.WriteLine(now.TimeOfDay); // 금일 자정부터 몇시간 보여줌 Console.WriteLin..

    C++ 클래스 템플릿에 선언된 friend 함수를 외부에 정의하는 방법

    적용 시 오류 template class Stack { ... public: friend std::ostream& operator

    해시 함수의 종류

    MD4 와 MD5 ① MD(Message Digest)4 Rivest 가 1990년에 만든 일방향 해시 함수로 128비트의 해시 값을 갖는다. 그러나 Dobbertin에 의해 MD4의 해시 값의 충돌을 발견하는 방법이 고안되어 현재는 안전하다고 할 수 없다. ② MD(Message Digest)5 MD4 를 만든 Rivest 가 1991년에 만든 일방향 해시 함수로 128비트의 해시 값을 갖는다. 여기서 입력은 512-비트 블록들로 처리된다. 전수 공격과 암호해독에 대한 우려가 심각해진 최근 몇 년을 제외하면 MD5 는 가장 널리 사용되던 안전한 해시 함수이었다. (2005년 깨졌으나, 사용은 되고 있음) ③ MD4 와 MD5 의 비교 - MD4 는 16단계의 3라운드를 사용하나 MD5 는 16단계의 4..

    C++ 변수와 함수에서의 const

    Const 의미 컴파일러 상수(*상수 : 정적인 data. 초기화를 한번밖에 못하는 data. 메모리 변경이 불가하다). 변수를 상수화하여, 한번 할당된 상수로 할당된 메모리의 모든 비트를 변경하지 못한다. Const의 장점 const키워드가 붙은 객체는 외부 변경을 불가능하게 한다. class 바깥에서는 전역 / namespace 유효범위의 상수를 정의하는데 씀. static 선언한 객체에도 const를 붙이는 것이 가능하다. 정적 / 비정적 data 멤버 모두를 상수로 선언할 수 있다. 변수에서의 Const int a = 10; int const *pn const int* pn = &n; -> 포인터가 가리키는 대상(값)이 상수. pn(주소)은 변경 가능하다, *pn(값)은 변경이 불가하다. int ..

    C extern (변수 / 함수 외부 선언)

    const와 typedef는 기본적으로 내부 링크로 처리되고 여기서 extern을 붙이면 외부 링크가 적용된다. 어떤 이름을 extern으로 지정하면 컴파일러는 이를 정의가 아닌 선언문으로 처리한다. 변수를 extern으로 지정하면 컴파일러는 그 변수에 대해 메모리를 할당하지 않는다 따라서 그 변수를 정의하는 문장을 따로 작성해야 한다. /* AnotherFile.cpp */ extern int x; int x{ 3 }; extern으로 선언하는 동시에 초기화가 가능하다. /* AnotherFile.cpp */ extern int x = { 3 }; extern을 붙이지 않아도 x는 기본적으로 외부 링크로 처리되기 때문에 생략 해도 된다. extern이 반드시 필요한 경우는 다른 소스 파일에서 x에 접근..