본문 바로가기

C26

[C/C++] GCC C언어 constructor/destructor, 생성자/소멸자 GCC C언어 constructor/destructor, 생성자/소멸자 GCC 계열의 C 컴파일러도 C++의 constructor/destructor와 유사한 동작을 수행할 수 있다. entry는 당연히 main() 부터 이지만 __attribute__ 의 constructor/destructor 키워드를 사용하면 main() 실행 전과 후 함수가 호출되는 것을 확인할 수 있고, priority를 지정하여 여러개의 함수를 우선순위에 맞춰 실행할 수도 있다. priority는 0~100까지 reserved되어있으니 그 외의 숫자를 사용하면 되고 priority 사용은 필수가 아니다. 소스코드 #include #include #include volatile sig_atomic_t is_exit_loop = .. 2022. 9. 7.
gcc warning case 정리 gcc warning case 정리 [-Waddress] 주소 표현의 의심스러운 사용에 대한 경고. void f (const char *x) { if (x == "abc") // warning: expression evaluates to false puts ("equal"); } void g (void) { if (!f) // warning: expression evaluates to false abort (); } [-Wimplicit-function-declaration] 함수를 명시적으로 선언하지 않은 채 사용한 경우에 경고. header include 누락, function declaration 누락 등.. 함수를 사용하기 전 명백하게 무엇인지 알려주지 않았다라는 의미. [-Wparentheses.. 2022. 9. 5.
ctags 지원 언어 목록 / list-language, list-map, languages ctags 옵션에 이어서 언어에 관련된 옵션들을 살펴본다. ctags 옵션 / recursive, only c, c++, exclude ctags 생성 응용 C/C++ 언어만 지정 경로로부터 recursive 하게 tagging하여 tag 수행 시간과 용량을 출력한다. 해당 경로는 필요에 따라 변경하여 사용한다. (time ctags -R --languages=C,C++ ~/. \ /usr/local.. muabow.tistory.com 1. --list-languages ctags에서 인식하는 언어 목록을 나타낸다. $ ctags --list-languages Ant Asm Asp Awk Basic BETA C C++ C# Cobol CSS DosBatch Eiffel Erlang Flex Fortra.. 2022. 9. 5.
ctags 옵션 / recursive, only c, c++, exclude ctags 생성 응용 C/C++ 언어만 지정 경로로부터 recursive 하게 tagging하여 tag 수행 시간과 용량을 출력한다. 해당 경로는 필요에 따라 변경하여 사용한다. (time ctags -R --languages=C,C++ ~/. \ /usr/local/include \ --exclude=test \ >& /dev/null) | awk '{print "Elapsed time: "$3}' ; du -h tags # 결과 Elapsed time: 0:10.80 48M tags 해당 명령의 옵션은 다음과 같다. -R recursive 하게, 즉 지정된 경로 이하 모든 디렉토리를 포함한다. 경로는 여러개를 입력 할 수 있다. 물론 중복 처리도 한다. --language=C,C++ C, C++ 관련.. 2022. 9. 4.
[C/C++] C언어 파일 생성/삭제 이벤트 모니터링 / inotify, event monitoring C언어 파일 생성/삭제 이벤트 확인 inotify - monitoring filesystem events, inotify 를 이용하여 파일시스템 이벤트를 모니터링하는 프로그램을 만들어보자. 응용 또는 질문은 댓글에 남겨주면 성실하게 답장해주겠다. 이번에도 늘 그렇듯 완성된 동작의 소스코드를 동작한다. 이번 소스코드에서는 생성(IN_CREATE)와 삭제(IN_DELETE)만 사용하였지만 더 많은 event trigger가 존재한다. inotify의 man page 일부 발췌 IN_ACCESS (+) File was accessed (e.g., read(2), execve(2)). IN_ATTRIB (*) Metadata changed—for example, permissions (e.g., chmod(2).. 2022. 1. 20.
[C/C++] C언어 mmap, msync, munmap 설명 mmap, msync, munmap 1.1. 사용법 #include void * mmap(void *start, size_t length, int prot, int flags, int flides, off_t offset); 1.2. 설명 mmap() 함수는 flides로 지정된 파일(혹은 다른 객체)에서 offset을 시작으로 length바이트 만큼을 start주소로 대응시키도록 한다. start주소는 단지 그 주소를 사용했으면 좋겠다는 정도로 보통 0을 지정한다. mmap는 지정된 영역이 대응된 실제 시작위치를 반환한다. prot인자는 원하는 메모리 보호모드를 설정한다. 사용할 수 있는 비트는 다음과 같다. PROT_EXEC 페이지는 실행 가능하다. PROT_READ 페이지는 읽을 수 있다. PROT.. 2022. 1. 19.
[C/C++] C언어 프로그램/함수 실행 시간 측정, us 마이크로초 기준 C언어 프로그램/함수 실행 시간 측정 C언어에서 사용할 수 있는 프로그램/함수 실행 간 시간 측정 방법을 공유한다. timeval 구조체를 이용하여 작성하였고 마이크로초(us) 단위로 측정하였다. 단위의 변환이 필요하다면 코드를 고쳐서 사용하도록 하자. 소스코드 - sleep 하여 1000000 us(1초)에 근사한 측정치를 보여주는지 확인하자. #include #include #include double calc_diff_time(struct timeval _x, struct timeval _y) { double x_us, y_us, diff; x_us = (double)_x.tv_sec * 1000000 + (double)_x.tv_usec; y_us = (double)_y.tv_sec * 10000.. 2022. 1. 18.
[C/C++] C++ 프로그램/함수 실행 시간 측정, ms 밀리초 기준 C++ 프로그램/함수 실행 시간 측정 C++ 에서 사용할 수 있는 프로그램/함수 실행 간 시간 측정 방법을 공유한다. chrono 를 이용하여 작성하였고 밀리초(ms) 단위로 측정하였다. 더 작은 단위가 필요하다면 duration_cast 의 인자를 원하는 단위로 변경하여 사용하면 된다. 소스코드 - 100ms 씩 10번을 sleep 하여 1000ms(1초) 에 근사한 측정치를 보여주는지 확인하자. #include #include #include using namespace std; using namespace chrono; int main(int _argc, char *_argv[]) { system_clock::time_point t_time_begin, t_time_end; milliseconds .. 2022. 1. 18.