임베디드 시스템을 사용하는 C++ 개발자로서 Linux API를 지속적으로 사용하면서 C++ "사고방식"을 유지하는 것은 어렵습니다. 예를 들어 폴링을 사용하여 장치 연결/연결 끊김을 모니터링하고 상태 컨텍스트를 사용하며 일반적으로 C++ 표준 라이브러리를 사용하여 잘 표현할 수 있는 패턴을 사용하는 libudev를 사용하고 싶을 수 있습니다.
stat
.C++17은 이제std::filesystem
.
또한 코드 명확성과 "완전성"을 위해 상호 작용하고 싶은 모든 GNU/Linux 하위 시스템에 대해 C -> C++ 바인딩을 작성할 시간이 없습니다. 이러한 사용자 공간 인터페이스의 대부분은매우현 시점에서는 성숙 단계에 이르렀으며, C++에 대한 바인딩이 존재하고 유지될 것이라고 기대하는 것은 그리 야심찬 일이 아니라고 생각합니다. 이전 사례를 관점에서 살펴보면 Python에는 pyudev
libudev에 대한 멋진 추상화를 제공하는 까지 있습니다.
내 질문은 다음과 같습니다.
GNU/Linux 환경에서 프로그래밍할 때 거의 모든 것에 대해 해키 바인딩을 작성하지 않고 어떻게 C++ 코드를 깔끔하고 표현력 있게 유지합니까(C++ 철학 유지)?
답변1
일반적으로 사람들은 C++에서만 C API를 사용합니다.
다른 사람이 좀 더 객체 지향적인 C++ 인터페이스를 만들었는지 확인해 볼 수 있습니다. 예를 들어, "udev C++"에 대한 Google 검색의 첫 번째 결과는 GitHub 저장소입니다.디미트리 이슈첸코/udev, 도움이 될 수 있습니다(장담할 수는 없습니다). 예를 들어 C++ D-Bus를 사용하여 udev와의 상호 작용을 구현할 수도 있습니다.sdbus-C++.
홍보하다표준 POSIX 라이브러리의 C++ 스타일 인터페이스에서 일부 공백을 채울 수 있는 다른 "반표준" C++ 라이브러리의 주요 소스입니다. 예를 들어 파일 시스템 라이브러리는 C++17에서 채택되기 전에 Boost에 존재했습니다.프로세스 간 강화공유 메모리, mmap 등을 처리합니다.부스트 프로세스,Boost.Program_options, 그리고부스트.아시오일부 POSIX 영역도 다룹니다.