最近的工作需要把一些只能跑在 Linux 上的 open source code 移植到 Windows, 例如 libmigdb.
原本以為用 MinGW 就可輕鬆解決, 但沒想到 mingw 沒有實作 fork(), waitpid(), 等函式. 只有 Cygwin 才有辦法, 因為他支援更完整的 POSIX API. 但無奈 Cygwin 編譯時間太久, 無法採用.
上 google 做一些功課後發現, Windows 的 C Runtime Library[1]至少有提供檔案, 記憶體, 字串, 數學等函式可以用. 其他找不到的函式, 像是 sleep(), 則可以靠 MinGW 幫忙.
但像 fork() 這種很 POSIX 的函式就無法靠 MinGW 了, 因為 fork() 的行為與 Windows 的 process management 差異甚大, 除非是像 Cygwin[2] 或是 WSL, 實現一層模擬層, 才有可能支援 fork().
[2] https://stackoverflow.com/questions/985281/what-is-the-closest-thing-windows-has-to-fork
[3] https://lionrex.pixnet.net/blog/post/117953664
[4] https://en.wikipedia.org/wiki/POSIX#POSIX_for_Microsoft_Windows