본문 바로가기

전체 글1042

Linux ] sysroot란? 임베디드 리눅스 개발을 하다보면 호스트 PC에서 타겟 보드용 애플리케이션을 개발해야할 경우가 많이 있다. 이 때 제대로 된 크로스컴파일 환경을 구성하려면, 크로스 컴파일러 말고도 꼭 있어야하는 것이 sysroot다. 이번 글에서는 sysroot의 개념과 gcc의 --sysroot 옵션 사용 방법에 대해 정리하고자 한다. gcc는 기본적으로 어떤 파일들을 어디에서 찾을까?네이티브 컴파일 환경에서 gcc는 다음을 암묵적으로 전제한다. 헤더 검색 위치/usr/include/usr/include/ 라이브러리 검색 위치/lib/usr/lib/lib//usr/lib/ 즉, gcc는 별도의 옵션이 지정되지 않은 경우, 이 코드는 지금 실행 중인 시스템에서 동작할 프로그램이라고 가정하고 현재 시스템의 루트(/) 아.. 2026. 1. 10.
UEFI (Unified Extensible Firmware Interface) 먼저 UEFI가 먼지 이해하려면 BIOS를 알아야 한다. BIOS란?컴퓨터가 켜지면 가장 먼저 실행되서 부팅 준비 작업을 하는 시스템 소프트웨어를 부트 펌웨어라고 한다. 전통적으로는 BIOS (Basic Input/Output System)가 이 역할을 담당했다. BIOS는 다음 과정을 통해 운영체제를 부팅한다. 하드웨어 초기화 (POST)전원이 켜지면 BIOS는 POST(Power-On Self-Test)를 수행하여 CPU, 메모리, 그래픽 카드 등 주요 부품이 정상인지 확인하고 사용할 준비를 마친다.부팅 디바이스 탐색 (Boot Priority)BIOS 설정에 저장된 부팅 우선순위(Boot Priority Order)에 따라 어떤 저장장치(HDD, SSD, USB 등)에서 부팅할 것인가가 정해지고,.. 2026. 1. 5.
C++ ] 함수 템플릿, 클래스 템플릿 템플릿C++에서 템플릿은 타입에 의존하지 않는 일반화된 코드 구조를 정의하는 문법이다. 템플릿을 사용하면 함수나 클래스를 작성할 때 특정 타입을 박아두지 않고, 나중에 어떤 타입으로도 재사용할 수 있어 코드 중복을 효과적으로 줄일 수 있다. 템플릿 선언 방식템플릿은 함수와 클래스 모두에 적용할 수 있다. 선언 방식은 동일하며, 함수와 클래스 위에 다음과 같이 선언한다. template 여기서 typename T는 템플릿 내부에서 실제 타입을 대신하는 형식 매개변수이다. 템플릿이 사용될 때 컴파일러가 이 T를 구체적인 타입(int, double, std::string 등)으로 치환한다. 템플릿의 구현 위치일반적인 C++ 코드가 선언은 .h 파일에 작성하고 정의는 .cpp 파일에 분리하여 작.. 2025. 12. 30.
선형 보간 (Linear Interpolation) 선형 보간 (Linear Interpolation)먼저 보간(interpolation)은 알려진 데이터 점들 사이의 값을 추정하는 수학적 기법을 말한다. 그 중에서도 선형 보간(Linear Interpolation)은 각 구간 내에서 출력이 입력에 대해 선형(직선) 관계를 따른다고 가정하는 가장 기본적인 보간 방법이다. 참고로 선형 보간은 차원에 따라 다음과 같이 구분될 수 있다. 다만 2차원, 3차원부터는 용어가 구체화되기 때문에 일반적으로 선형 보간이라고만 하면 1차원을 의미하는 경우가 많다.(1D) Linear Interpolation : 직선 상에서 두 개의 기준점을 이용해 값을 추정하는 방식, y = f(x)(2D) Bilinear Interpolation : 좌표 평면 상에서 네 개의 기준점을.. 2025. 12. 25.
Ubuntu ] 우분투 듀얼 부팅 설치하기 1. Rufus 다운로드 https://rufus.ie/ko/ 2. Ubuntu 이미지 다운로드 Ubuntu 22.04 : https://releases.ubuntu.com/jammy/ 3. Rufus로 Ubuntu 부팅 USB 만들기 부팅이미지를 선택하고 USB 장치가 올바르게 선택됐는지 확인한 후 설정값을 아래와 같이 하고 시작을 누른다. 경고문구가 뜨면 디폴트값 또는 예를 선택해주면 된다. ✓ 파티션 구성 선택 기준 : MBR vs GPT MBR과 GPT는 디스크의 파티션 테이블 구조로, MBR은 Legacy BIOS 부팅에서 사용되는 오래된 방식, GPT는 UEFI 부팅 시 요구되는 최신방식이다. 최신 PC의 경우 대부분의 UEFI + GPT 조합이기 때문에 GPT를 선택하면 .. 2025. 12. 21.
DIV_ROUND_UP, DIV_ROUND_CLOSEST 임베디드 환경에서는 가급적 부동소수점 연산을 피하고, 정수 연산을 선호하는 경우가 많다. 실제로 다루는 데이터가 정수 단위인 경우가 많기 때문이기도 하지만 성능 최적화를 위해 실수 연산을 직접 사용하기보다 값을 미리 scale up한 뒤 정수 연산으로 처리하고, 필요한 시점에만 의미 있는 단위로 해석하는 방식이 널리 사용된다. 이때 유용하게 사용할 수 있는 것이 바로 정수 나눗셈 기반의 올림과 반올림 매크로 함수이다. 다음 코드는 리눅스 커널에서도 사용된다. #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))#define DIV_ROUND_CLOSEST(n, d) (((n) + ((d) / 2)) / (d)) DIV_ROUND_UP : 정수 나눗셈.. 2025. 12. 20.
C++ ] 싱글톤(Singleton) 클래스 싱글톤(Singleton) 패턴싱글톤(Singleton) 패턴은 "프로그램 전체에서 오직 하나의 인스턴스만 존재해야 하는 클래스"를 만들 때 사용하는 디자인 패턴이다. 주로 전역 상태를 관리하는 클래스나 설정 파일, 시스템 로그 등의 공용 리소스를 다루는 클래스에서 사용한다. 싱글톤(Singleton) 클래스 구현 방법 싱글톤 클래스를 구현할 때는 다음 요소를 갖춰서 구현해야 한다. 생성자 비공개 : 외부에서 new 연산자를 사용해서 인스턴스를 직접 생성하는 것을 막기 위해 생성자는 private 또는 protected로 선언해야 한다.복사 및 이동 방지 : 단일 인스턴스를 유지 하기 위해 복사 생성자, 복사 대입 연산자, 이동 생성자, 이동 대입 연산자를 명시적으로 삭제해야 한다.정적 인스턴스와 .. 2025. 12. 15.
Windows ] diskpart 유용한 명령어 (+ clean vs clean all) DiskpartDiskpart는 Windows에서 디스크 초기화, 파티션 생성/삭제, 파티션에 드라이브 문자 할당/제거 등의 작업을 수행할 때 유용하게 사용할 수 있는 명령줄 도구이다. Diskpart 실행명령 프롬프트에서 diskpart 입력하여 실행diskpart 디스크 목록 확인PC에 연결된 SSD, HDD, USB, SD 카드 등 물리적 저장장치 목록을 보여준다.list disk 특정 디스크 선택은 list disk 결과에 표시된 디스크 번호sel disk 선택한 디스크 전체 초기화디스크 전체 구조를 삭제하고 완전히 빈 상태로 만든다.cleanclean all ✓ clean vs clean all 차이clean : MBR/GPT 파티션 정보만 삭제한다. 데이터는 실제로 남아 있으.. 2025. 12. 12.
Windows ] MAC 주소 변경 방법 장치 관리자 > 네트워크 어댑터 > MAC 주소 변경할 네트워크 어댑터 선택 후 우클릭 속성 > 고급 > 네트워크 주소 > 값 체크 값에 예를 들어 123456ABCDEF라고 입력 후 확인을 누르면 MAC 주소를 12:34:56:AB:CD:EF로 바꿀 수 있다. 바꾼 MAC 주소는 명령 프롬프트 창에서 ipconfig /all 명령으로 확인 가능하다. 해당 방식은 윈도우 레지스트리의 장치 프로필에 MAC 정보를 저장하는 방식으로, USB 이더넷 어댑터를 뺐다 다시 꽂아도 이전에 설정된 값이 그대로 적용된다. 2025. 12. 9.
Ubuntu ] 화면 누리끼리하게 보일 때 해결 방법 그래픽카드 드라이버를 재설치해도 효과가 없었는데 구글링을 통해 해결 방법을 찾았다. Settings > Color > 누리끼리하게 보이는 모니터 선택 후 Add profile 클릭 Colorspace: sRGB 선택 기존 profile은 삭제 하고 새 profile을 적용하니 화면이 밝게 보인다. 2025. 12. 6.
뮤텍스(Mutex)와 세마포어(Semaphore)의 차이 프로그래밍 관련 블로그를 보면 뮤텍스와 세마포어의 가장 큰 차이는 보호하려는 자원의 개수 차이이며, 화장실 칸 비유로 설명하는 글을 많이 볼 수 있다. 하지만 해당 설명만으로는 두 동기화 기법을 언제, 어떤 용도로 사용하는 지 목적을 이해하기 어렵다. 이번 글에서는 뮤텍스와 세마포어의 사용 용도 차이를 중심으로 두 동기화 기법의 차이를 정리해보려고 한다. Mutex와 Semaphore의 차이 뮤텍스 (Mutex)세마포어 (Semaphore)주 사용 용도공유 자원 보호생산자/소비자 간 동기화(이벤트 통지 or 자원 풀 관리)동기화의 목적자원 접근 순서 조정(상호 배제, Mutual Exclusion)Task 간 실행 순서 조정(Task Synchronization)자원 개수1개1~N개(1: 바.. 2025. 12. 3.
C++ ] constexpr constexpr constexpr은 C++11에서 추가된 키워드로, 변수나 함수를 컴파일 타임에 값이 결정되는 상수로 만들도록 컴파일러에게 지시하는 역할을 한다. 이를 통해 컴파일러는 미리 값을 계산하여 최적화된 코드를 생성하고, 런타임 성능을 향상시킬 수 있다. constexpr를 변수에 사용하는 경우 constexpr을 변수 선언에 사용하면 그 변수는 컴파일 타임에 값이 결정되는 상수로 취급된다. 상수이기 때문에 배열 크기로도 사용이 가능하다. // 전역 기준constexpr int SIZE = 10;int arr[SIZE]; // C++에서 가능const int SIZE = 10;int arr[SIZE]; // C++에서 가능, C에서는 오류 const 키워드와 유사해 보일 수 있지만,.. 2025. 11. 30.
C/C++ ] 리턴하지 않는 함수임을 명시하는 키워드 리턴하지 않는 함수의 의미리턴하지 않는 함수란 호출자에게 제어권을 반환하지 않는 함수임을 의미한다. 즉, return을 하지 않고 프로그램이 바로 종료되거나, 후속 코드가 실행되지 않고 예외로 튀거나, 무한 루프에 들어가는 함수라는 뜻이다. 컴파일러에 리턴하지 않는 함수임을 알려주는 이유컴파일러에게 아래에서 소개할 키워드 사용을 통해서 “이 함수는 절대 리턴하지 않는다”는 정보를 알려주면 다음과 같은 이점이 있다. “리턴값이 없습니다" 또는 "모든 제어 경로에서 값을 반환하지는 않습니다” 같은 불필요한 컴파일러 경고를 억제할 수 있다. 단, 경고 발생 유/무는 컴파일러마다 다를 수 있다.컴파일러가 호출 이후 코드를 제거하거나 unreachable 코드로 처리하여 최적화할 수 있다.코드 경로 분석 시.. 2025. 11. 27.
Linux ] rename이 atomic한 이유 (리눅스 파일의 참조 구조) renamerename은 POSIX 표준의 파일 관련 시스템 콜 중 하나로 파일 이름(경로)를 변경할 때 사용한다. rename을 사용하면 기존 파일 oldpath를 새 경로 new path로 변경하고, 만약 newpath가 이미 존재하는 경우 atomically replaced 된다는 중요한 특징을 가지고 있다. #include int rename(const char *oldpath, const char *newpath);oldpath : 기존 경로newpath : 바꾸고자 하는 경로 rename이 atomic하다는 의미man 2 rename으로 rename 시스템 콜의 man page를 확인하면 이런 특징에 대한 설명이 나와있다. If newpath already exists, it will.. 2025. 11. 24.
Linux ] journalctl 사용법 (systemd-journald) journalctljournalctl은 systemd-journald의 CLI 도구로, systemd 기반 init 시스템을 사용하는 리눅스에서 커널/서비스/사용자 프로세스의 로그를 한데 모아 조회할 수 있게 해주는 표준 툴이다. 저장 경로 journal 로그는 텍스트 파일이 아니라 바이너리 데이터로 저장되며, 저장 유형에 따라 하기 디렉토리 아래 디렉토리 내 .journal 파일로 저장된다. 비영속 (RAM(tmpfs) 저장) : /run/log/journal/영속 (디스크 저장) : /var/log/journal/ 한편, systemd-journal의 저장 방식/용량 정책 등을 설정하는 구성 파일은 /etc/systemd/journald.conf 경로에 존재한다. 기본 사용법# 전체 로.. 2025. 11. 21.
Linux ] watch 명령어 사용법 watchwatch는 지정한 명령어를 일정 간격 반복 실행하면서 실행 결과를 터미널 화면 전체에 갱신하며 보여주는 도구이다.주로 명령의 출력이 어떻게 변화하는지 확인하고 싶을 때 사용한다.watch [옵션] 주요 옵션-n : 명령을 실행할 주기를 초 단위로 지정한다. 기본값은 2초이다.-d : 이전 출력과 달라진 부분을 하이라이트하여 표시한다.-t : 화면 상단의 제목(명령, 주기, 시간) 표시를 생략한다.-p : 명령 실행시간을 포함 보정하여 정밀한 주기로 실행한다.-g : 출력이 변경되면 즉시 종료한다.-c : ANSI 컬러를 유지하며 출력을 표시한다. 기본적으로 watch는 터미널 이스케이프 문자를 처리해 표시하지 않는다.-b : 출력이 변경될 때 비프음을 발생시킨다.-x : 명령을 쉘이 아.. 2025. 11. 18.
Linux ] ln 명령어 사용법 lnln은 link를 생성하는 명령으로 리눅스에서 파일을 복사하지 않도 다른 경로에서 동일한 파일을 참조하고 싶을 때 사용할 수 있는 명령어다.ln [옵션] ✓ 하드 링크와 심볼릭 링크리눅스 파일 시스템에서는 두 가지 종류의 링크가 존재한다. 하드 링크 (Hard link)심볼릭 링크 (Symbolic link)링크 대상원본의 inode원본의 파일 경로제약동일 파티션 내에서만 가능다른 파티션도 가능원본 삭제 시링크 및 내용 유지링크 깨짐디렉토리 링크불가능가능확인 명령ls -lii 옵션을 사용하면 파일의 inode가 함께 출력된다. 두 파일의 inode 번호가 서로 같은 경우 하나는 하드 링크 파일임을 알 수 있다.ls -l파일 목록을 상세 출력하여 타입이 l로 시작하면 심볼릭 링크 파일이며, 링.. 2025. 11. 15.
Linux ] 파일 append는 정말 atomic 할까? 멀티 프로세스 환경에서 개발을 하다보면, 여러 프로세스가 동시에 같은 파일에 데이터를 추가하는 상황이 존재한다. 이 때, 데이터가 섞이거나 중간에 깨지지 않을까 걱정이 될 법하다. 실제로도 아무 생각없이 구현하면 한 프로세스가 파일 끝으로 이동하여 데이터를 쓰기를 마치기 전에 다른 프로세스가 도중에 끼어들어 데이터가 잘리고 섞일 수 있다. 하지만 다행히도 POSIX API에는 이 문제를 해결하기 위한 방법이 이미 존재한다. 파일을 O_APPEND 플래그로 열고 write() 시스템 콜로 쓰면, 커널이 이 과정을 atomic하게 처리한다는 것이다. 실제로 "man 2 write" 명령을 통해 system call 섹션 중 write() 함수에 대한 man page를 살펴보면 해당 부분에 대한 설명을 찾아볼.. 2025. 11. 12.
Linux ] top 명령어 사용법 toptop 명령어는 Linux/Unix 시스템에서 CPU 사용량, 메모리 사용량, 실행 중인 프로세스 목록 등을 실시간으로 모니터링하는 데 사용하는 명령줄 프로그램이다. top 주요 실행 옵션-d : 화면 갱신 주기를 지정, 기본 3초-p : 특정 PID만 모니터링-u : 특정 사용자 프로세스만 표시-n : 지정 횟수만큼 갱신 후 종료-b : 배치 모드로 화면을 지우지 않고 계속 출력한다.-o : 정렬 기준을 지정한다. %MEM 등. 기본 정렬 기준은 %CPU이며 정렬 방향은 내림차순이 기본이다. 특정 이름의 프로세스만 추적하기특정 이름을 가진 프로세스의 자원 사용량만 실시간으로 모니터링하고 싶다면, pidof 또는 pgrep 명령어를 top과 함께 사용할 수 있다. 참고로 $()는 셸.. 2025. 11. 9.
com0com - 가상 COM port 에뮬레이터 com0com은 Windows 전용 무료 오픈소스 프로그램으로, 두 개의 가상 COM 포트를 만들어서 서로 연결해준다. 다운로드 링크 :https://sourceforge.net/projects/com0com/ Null-modem emulatorDownload Null-modem emulator for free. The virtual serial port driver for Windows. The Null-modem emulator (com0com) is a kernel-mode virtual serial port driver for Windows. You can create an unlimited number of virtual COM port pairs and use any pair to csour.. 2025. 11. 6.
Linux ] dup2() 함수를 사용한 표준입출력 리다이렉션 dup2()dup2()는 한 파일 디스크립터(oldfd)에 연결된 커널 오브젝트를 다른 FD(newfd) 슬롯에도 연결시키는 함수이다. 보통은 리다이렉션을 구현할 때 많이 사용한다. 함수 원형#include int dup2(int oldfd, int newfd); oldfd : 복사할 원본 FDnewfd : 덮어쓸 대상 FD반환 값 : 성공 시 newfd, 실패 시 -1newfd가 이미 열려 있다면 먼저 close(newfd)가 내부적으로 호출하고 newfd가 oldfd와 같은 커널 오브젝트를 가르키도록 덮어쓰기 된다. 동작 원리모든 프로세스는 각자 자신만의 파일 디스크립터(FD) 테이블을 가지고 있다. 그리고 프로세스가 시작될 때 운영체제는 이 FD 테이블을 다음과 같이 초기화한다.0번 .. 2025. 11. 3.
Linux ] fork()를 통한 프로세스 생성 Linux/UNIX 운영체제 환경에서 새로운 프로세스를 생성하는 대표적인 시스템 콜인 fork()에 대해 알아보자. fork()fork()를 호출하면 부모 프로세스의 주소 공간이 그대로 복사돼서 자식 프로세스가 만들어진다.부모 프로세스의 메모리 공간 즉, Code(Text), Data(Data, BSS), Heap, Stack 영역을 자식이 똑같이 가진 상태로 시작한다.부모 프로세스와 자식 프로세스는 같은 코드 위치(fork() 리턴 이후)에서 실행을 이어간다.부모와 자식 프로세스는 fork()의 반환값이 다르게 나오기 때문에 개발가자 구분하여 실행 경로를 나눌 수 있다.부모 프로세스는 자식의 PID(> 0) 반환자식 프로세스는 0 반환실패시 -1 반환복제된 시점 이후로 부모 프로세스와 자식 프로세스는.. 2025. 11. 1.
Linux ] ps 명령어 사용법 psps는 Linux 등 UNIX 계열 운영체제에서 현재 실행 중인 프로세스의 상태를 확인하는 명령어이다. ps 명령어만 사용하면 현재 사용자가 실행중인 프로세스의 목록과 정보를 보여주며, 다양한 옵션을 추가하여 모든 프로세스를 보거나 프로세스에 대한 더 자세한 정보를 획득할 수 있다. Process ID(PID)메모리 공간을 차지하여 실행 중인 프로그램 하나하나를 프로세스라고 부르며, 각 프로세스는 고유한 PID(Process ID)가 부여되어 시스템이 해당 프로세스를 구분하고 제어하는데 쓰인다. ps 주요 옵션앞에 -(대시)가 붙는 옵션-e : 모든 프로세스 표시-f : UID, PPID 등 full format으로 출력-u : 특정 사용자 프로세스만 출력-p : 특정 PID만 출력.. 2025. 10. 30.
로지텍 G102 더블 클릭 증상 자가 수리 (클릭 버튼, 뒤로가기 버튼 스위치 교체) G102 로지텍 마우스에서 고질적 문제인 더블 클릭 증상이 발생하여 자가수리를 해보기로 했다. 교체할 스위치는 원래 G102에 사용되는 모델이 아닌 G903에 사용되는 고급형 스위치 모델(D2FC-F-K 50M)을 구입했다. 구입 가격은 개당 850원이다. 마우스 뒷판에서 표시한 세 군데 스티커를 조심스럽게 떼고 나사를 풀어 분해한다. 사진에 표시한 다섯 군데 나사를 풀러 기판만 따로 분리한다. 나는 이 중에서 더블 클릭 증상이 실제 나타난 클릭 버튼과 뒤로가기 버튼 스위치만 교체해주기로 했다. 원래 있던 걸 떼고 새로산 스위치를 납땝을 하면 되는 데, 뗄 때는 납을 좀 묻혀주고 납흡입기를 사용하면 쉽게 떨어진다. 다시 분해의 역순으로 조립한다.조립 전에는 먼지 청소도.. 2025. 10. 27.
Linux에서 현재 프로세스가 모니터가 연결된 GUI 세션인지 확인하는 법 리눅스에서 현재 프로세스가 모니터가 연결된 GUI 세션인지 확인하는 법 리눅스 환경에서 사용되는 디스플레이 서버 프로토콜은 크게 두 가지로 나뉜다.X11 : 전통적인 GUI 서버 프로토콜로 대표적인 구현은 Xorg이다. $DISPLAY 환경변수 (:0, :1, …)를 사용한다.Wayland : 차세대 GUI 서버 프로토로 $WAYLAND_DISPLAY 환경변수(wayland-0, wayland-1, ...)를 사용한다. 일반적인 상황에서 다음과 같이 환경변수를 확인했을 때 둘 다 값이 비어있으면 GUI 세션이 아니고, 콘솔 세션이라고 판별할 수 있다.echo $DISPLAYecho $WAYLAND_DISPLAY C 코드에서 확인할 때는 환경변수 값을 읽어오는 getenv() 함수를 사용할 수 있다.#.. 2025. 10. 24.
POSIX C ] root 권한 체크하기 C 코드에서 현재 실행 중인 프로세스가 root 권한인지를 확인하는 방법으로는 프로세스 사용자 ID를 가져와 이 값이 0인지 검사하면 된다. ※ UID(User ID)란?리눅스에서 사용자는 숫자 값인 UID로 식별된다.0 : root 유저1 ~ 65535 : 일반 사용자1 ~ 999 : daemon, bin, sys 같은 시스템 계정들1000 ~ : 일반 사용자는 UID 1000부터 배정 리눅스 C 라이브러리에서 사용자 ID를 가져오는 함수는 크게 두 가지가 있다.#include uid_t getuid(void);uid_t geteuid(void);getuid() : 실제 로그인한 사용자의 UIDgeteuid() : 실행 시점에 적용되는 유저의 UID일반 사용자가 sudo로 실행한 경우 프로세스 자체.. 2025. 10. 21.
Windows / Linux ] 파일의 CRC32 체크 툴 아래에서 소개하는 툴은 가장 널리 쓰이는 CRC-32 표준을 기반으로 파일의 체크섬을 계산하는 툴이다. CRC-32 표준 (ISO 3309 / ITU-T V.42 / PKZIP / Ethernet 등에서 사용)Polynomial (poly): 0x04C11DB7 (Bit-Reflected 표현은 0xEDB88320)Initial value (init): 0xFFFFFFFF (계산 시작 시 CRC 레지스터의 초기값)Reflect input (refin): True (입력되는 각 바이트를 다항식 연산 전 LSB↔MSB 뒤집어서 처리)Reflect output (refout): True (계산이 끝난 최종 CRC 결과값을 LSB↔MSB 뒤집어서 출력)Final XOR value (xorout): 0xFFFF.. 2025. 10. 18.
errno == EINTR 시스템 프로그래밍을 하다보면 errno == EINTR 을 체크해서 루프 돌리는 코드를 많이 보게 된다. EINTR이란?#include EINTR은 Interrupted system call의 약자로, 시스템 콜이 실행 중 시그널(signal)에 의해 인터럽트되어 중단되었음을 나타내는 오류 코드(errno)다. 즉, 블로킹 계열의 시스템 콜 호출 중에 시그널이 오면, 해당 시스템 콜은 -1을 리턴하고 errno에 EINTR을 설정한다. 왜 EINTR 처리가 필요한가?시그널이 항상 종료 신호는 아니다.SIGINT(Ctrl+C)는 보통 종료 의도이지만, SIGCHLD(자식 프로세스 종료 알림), SIGALRM(타이머 만료), SIGHUP(터미널 세션 끊김) 등은 프로그램이 계속 동작하면서 처리해야 하는 .. 2025. 10. 15.
Linux ] NAS 마운트 방법 1. NAS 접근 확인smbclient 패키지 설치sudo apt install smbclient 마운트 전에 공유가 열려 있는지, 어떤 공유 폴더가 있는지 확인 smbclient -L //192.168.1.100 -U 사용자-L : 서버가 제공하는 공유 목록을 보여줌-U 사용자 : NAS 사용자 계정 2. NAS 마운트cifs-utils 패키지 설치sudo apt install cifs-utils 1. 에서 확인된 공유 이름으로 마운트한다. 이때 NAS 공유 폴더 이름이나 로컬 마운트 지점에 한글 또는 공백이 들어가면 따옴표로 감싸야 한다.sudo mount -t cifs "//192.168.1.100/내 공유" /mnt/nas \ -o username=사용자,password=비밀번호,vers=.. 2025. 10. 12.
Linux ] rsync 명령어 사용법 rsync는 리눅스에서 기본 제공되는 명령어로 파일 또는 디렉토리를 동기화하는데 사용한다. 단순 복사하는 것보다는 강력한 옵션을 지원한다. 기본 사용법rsync [옵션] 소스가 디렉토리인 경우 슬래시 규칙소스 경로에 /가 없는 경우 : src/ 디렉토리 자체가 dst/ 밑에 복사됨소스 경로에 /가 있는 경우 : src/ 안의 내용물만 dst/ 밑에 복사됨 자주 쓰는 옵션rsync -avh 는 거의 기본 세트처럼 항상 쓰이며, 여기에 필요한 옵션을 추가해 사용한다. -a, --archive: 아카이브 모드, -rlptgoD 옵션을 묶은 단축키로 다음을 포함한다. 재귀복사 + 심볼릭 링크 보존 + 퍼미션 보존 + 수정 시간 보존 + 그룹 정보 보존 + 소유자 정보 보존 + 디바이스 파일 보존-v: 상.. 2025. 10. 9.
반응형