본문 바로가기

분류 전체보기

(694)
std::process::Command 관련 [1. 개요] rust 에서 윈도우/리눅스 명령어를 사용하고, 그 결과 등을 캡쳐 할 필요가 있을 때 std::process::Command 를 사용하여 원하는 작업을 할 수 있다. 여기서는 ssh2 에서 처럼 작업을 수행하고, 블로킹 되는 것 없이, 현재 진행 중인 작업 중인 로그를 출력하고, 자식 프로세스의 Exit code 를 받아오도록 한다. [2. 예제] [3. 참조] https://doc.rust-lang.org/std/process/struct.Command.html
[좀 더 작성, 콜 스택 부분] Windows, c++, CallStack [1. 개요] __try ~ __except 를 이용해서 예외 상황 발생 시, 그 처리에 대해서 정리하였고, 여기에서는 예외 상황 발생 시 디버깅을 위한 Call stack 을 남기는 방법을 정리하도록 한다. [2. 예제] 출력 [3. 설명] 먼저 예외가 발생한 위치(주소) 는 GetExceptionInformation() 을 통해 반환 된, _EXCEPTION_POINTERS 에서 ExceptionAddress 를 통해 확인 할 수 있다. 여기서 이 주소를 포함하는 함수를 호출 한 곳으로 되돌아 가야 하는데, 이에 대한 정보는 EBP 레지스터 값을 통해 알 수 있다. 따라서, EBP 레지스터 값이 return address 가 되는 것이다. IsBadCodePtr() 은 인자로 전달 받은 주소가 읽기 ..
ssh2 관련 [1. 개요] rust 에서 ssh 라이브러리 사용 시, 필요 했던 점 정리한다. 필요한 기능 ssh 로 원격 작업 수행 블로킹 되는 것 없이, 실행 로그를 실시간 출력 원격 작업 종료 후, Exit code 를 받는 것 까지 [2. 예제] [3. 참조] https://crates.io/crates/ssh2 https://docs.rs/ssh2/latest/ssh2/
copy 명령어에 대해서 [1. 개요] samba 로 연결된 서버에서 특정 키워드를 갖는 파일 이름으로 갖는 1천여개 이상의 파일을 복사해올 필요가 있었다. cmd 에서 작업을 진행했는데, 복사한 파일이 원본 파일보다 바이트 수가 낮은 문제가 있었다. [2. 해결] 당시 사용한 명령어는 아래와 같다. for /F %a in ('type tclist.txt') do copy "외부 파일경로"\%a_* " 내 파일 경로" 여기서 copy 에 옵션을 추가하였다. copy /b 대상이 이진 파일임을 명시한다. /b 옵션이 없으면 텍스트 모드로 여는지 까지는 확인해보지 않았지만, 문제는 해결 할 수 있었다.
Rust, tauri 개발 환경 설정 [1. 개요] Rust 로 gui 애플리케이션이 만들필요가 있을 때, 유용함. 공식 사이트에 소개된 tauri 장점 https://tauri.app/ 다중 플랫폼 배포를 위한 최적화되어 있고, 안전하며, 프론트엔드 독립적인 앱을 구축가능. 운영체제의 기본 웹 렌더러를 사용하여 Tauri 앱의 크기는 600KB보다 작아질 수 있습니다. Rust로 구축 가능 [2. 개발 환경 설정] Windows 를 기반으로 정리 rust 는 이미 설치되었다고 가정. cargo install create-tauri-app --locked # cargo-create-tauri-app.exe 가 Rust 가 설치된 곳에 위치하게 된다. # os 에 맞는 prerequisites 를 설치 # https://tauri.app/v1..
Rust. 프로젝트 구조 [1. 개요] Rust 로 application 작성 시, 규모가 커질 경우 당연하게도 소스 코드를 모듈 별로 분리할 필요가 있다. 여기서는 소스코드로 분리하는 방법을 정리한다. [2. 개념] cargo 를 이용하여 두가지 형태의 프로젝트를 생성 할 수 있다. executable library executable 형태에서는 main.rs 가 진입점이고, library 형태에서는 lib.rs 가 진입점이다. main.rs 를 기준으로 같은 디렉터리에 있는 소스코드의 경우, 파일 이름명이 바로 module 이 된다. main.rs 를 기준으로 하위 디렉터리에 있는 소스코드 중 mod.rs 는 해당 디렉터리의 상위 모듈이 되고, 그 디렉터리내 소스코드의 파일명이 하위 모듈이 된다. main.rs 에서는 키워드..
Window, C++, 예외처리 [1. 개요] 윈도우 환경에서 C++ 애플리케이션 작성 시, 예외처리 방법을 정리한다. try ~ catch __try ~ __except (SEH) Unhandled Exception Filter [2. try ~ catch] 표준 C++ 에서 제공하는 예외 처리 방법 throw 키워드를 이용해 명시적으로 발생시킨 예외를 제어한다. catch 에서 예외를 전부 제어할 수 없는 경우, 비정상 종료가 발생한다. [3. __try ~ __except] 윈도우 에서 제공하는 예외 처리 방법 # 리눅스에서는 사용 불가 (?) SEH (=Structured Error Handling) 이라고 부른다. [4. Unhandled Exception Filter] [5. GetExceptionCode() ] 발생한 ex..
Rust. 알고리즘 문제 풀이 기본 코드 구조 [1. 개요] 알고리즘 문제 풀이 시, Rust 로 작성 하는 경우, 기본 골격이 되는 코드 구조 정리 [2. 예시-01] 한줄의 입력에서 세개의 숫자를 읽고 그 숫자들의 합을 출력하는 문제 [3. 예시-02] 2줄에서 2개의 숫자를 읽고, 그 합을 출력 [3. 예시-03] EOF 를 만날 때 까지, 입력 스트림으로 부터 데이터 읽어들이고 출력
C++ 멀티 스레딩 - 메모리 모델 [1. 원자계] std::atomic_flag clear() => flag 값을 false 로 test_and_set() => flag 값을 true 로, 읽기와 쓰기 연산이 하나의 원자계 연산으로 수행 된다. 최초 생성 시, ATOMIC_FLAG_INIT 상수를 이용해 false 로 초기화 해야 한다. 잠김 없는 유일한 원자계 더 높은 수준의 스레드 추상화를 위한 빌딩 블록 std::atomic_flag 를 이용한 spinlock 구현 std::atomic
Docker. 기타 설정 [1. 개요] [2. non-root 계정에서 도커 명령어 실행] # usermod -aG docker "user_이름"