Linux C++ 開發簡介(包括Linux守護線程)


主要介紹將Windows程序遷移到Linux系統相關知識

簡介

Windows程序遷移到Linux系統可能需要修改很多代碼,
既需要了解Linux平台的開發知識,
也需要了解Windows平台代碼如何遷移到Linux平台,
下面分享一下我所掌握的相關開發經驗,
如果有不對的地方,請立即指出

操作系統

Linux操作系統都是使用Linux內核,比較常見的Linux發行版有 CentOS、RedHat、Debain、openSUSE等。
主流linux發行版的概述+比較+推薦

編輯器

  • Vim
  • Emacs
  • gedit
  • Atom
  • Visual Studio Code
  • ...

編譯器

  • GCC
  • Clang

構建系統

  • make
  • CMake
  • qmake
  • automake
  • ...

調試

  • gdb
  • lldb
  • ...

IDE

  • Eclipse
  • CodeBlocks
  • Clion

可執行程序、動態庫、靜態庫

類型 Windows Linux
執行程序 .exe 具有執行權限的文件,可以無擴展名
動態庫 .dll .so
靜態庫 .lib .a
批處理 .bat/.cmd Shell腳本,一般為.sh

服務

Windows服務是Windows下特有的一種服務模型,一個Windows服務程序不能直接運行在Linux上,需要對這個Windows服務進行一些修改才能運行到Linux上。

Windows服務簡介

Windows服務的運行需要一個Windows服務以及一個服務管理程序。

創建Windows服務

構建一個Windows服務可能有幾種方式,比較常見的有,直接使用Windows服務API,另外一種方式,使用VS的服務模板,生成一個服務程序,而這個程序使用atl框架,而這個ATL框架實際就是對Windows服務API的封裝。

通過VS創建一個Windows服務程序看一個參考創建Windows服務

注冊Windows服務

創建了Windows服務后,在運行服務前,需要先向系統注冊一下。
通過VS生成的服務,注冊比較簡單,詳情可以參考注冊Windows服務

管理Windows服務

可以通過Windows服務管理器services.msc,net命令、sc命令管理Windows服務,詳情可以參考命令行管理Windows服務

Linux守護進程簡介

Linux服務,又稱為守護進程,或則daemons,與Windows服務類似,也需要一個服務程序以及一個管理程序。

創建Linux守護進程

創建守護進程程序要比創建Windows服務程序簡單很多,詳情可以參考守護進程詳解及創建

管理Linux守護進程

跨平台服務框架——Boost.Application

Boost.Application是一個開源的C++庫,主要用於構建跨平台的服務,包括Windows、Unix、Linux、MaxOS等。沒錯,這個庫可以用來做跨平台的服務。Boost.Application 使用開源協議 Boost Software License, Version 1.0。

使用Boost.Application可以很方便的編寫跨平台的服務代碼,具體請參考使用Boost.Application快速構建Windows服務

日期和時間

boost::posix_time
數據庫自己封裝了一個date_time

多線程

Windows Linux 跨平台
CreateThread pthread庫 std::thread
GetCurrentThreadId pthread庫 std::this_thread::get_id
Sleep usleep std::this_thread_sleep_for(std::chrono::second(1))

同步

Windows Linux 跨平台
CRITICAL_SECTION pthread庫 std::mutex
遞歸鎖 pthread庫 std::recursive_mutex
讀寫鎖 pthread庫 boost::shared_mutex
CreateMutex pthread庫 boost::interprocess::named_mutex
InterlockedCompareExchange pthread庫 std::atomic
CreateEvent(not named) pthread庫 std::condition_variable
CreateEvent(named) System V signal boost::interprocess::named_condition

文件和目錄

boost::filesystem

IO

Windows Linux 跨平台
Create/Open/Read/WriteFile create/open/read/write 標准C(fopen)/標准C++(fstream/filebuf)

IPC

Windows Linux 跨平台
CreateFileMapping/MapViewOfFile/FlushOfView mmap boost::interprocess庫

SEH

Windows Linux 跨平台
__try/__except signal 自定義跨平台宏

dump

Windows Linux 跨平台
MiniDump - -

VisualGDB

VisualGDB是一個VS插件,通過此插件,可以實現VS編輯、編譯、調試Linux程序。

開發Linux程序

Using Visual Studio to develop Linux apps

支持CMake

Creating CMake Linux projects with Visual Studio

調試

10 Powerful Debugging Tricks with Visual Studio

附加調試

Attaching to remote Linux applications with VisualGDB

分析崩潰轉儲

Debugging Linux Core Dumps with VisualGDB

從Windows遷移到Linux

Porting a Windows App to Linux with Visual Studio

學習資料

    • 鳥哥的Linux私房菜 基礎學習篇
    • Linux C編程一站式學習
    • UNIX環境高級編程

http://www.cnblogs.com/hbccdf/p/cplus_for_linux.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM