請問 Windows (Visual C) 有 unistd.h 的替代品嗎?
為了將為 Unix 編寫的相對簡單的控制台程式移植到 Windows 平台(Visual C 8.0),所有來源檔案都包含了在 Windows 中不存在的 "unistd.h"。刪除它後,系統會抱怨找不到 'srandom'、'random' 和 'getopt' 的原型。
我了解我可以取代隨機函數,而且我非常確信能夠找到/取得一個 getopt 實作。
但相信其他人也遇到了同樣的挑戰。我的問題是:是否存在 "unistd.h" 向 Windows 的連接埠?至少應包含那些具有 Windows 本機實現的函數,我不需要管道或分叉。
編輯:
我知道我可以創建包含我需要內容替換項目的自己的"unistd.h",尤其是在這種情況下,因為它是一個有限的集合。但由於它似乎是一個常見問題,我想知道是否有人為更大範圍的功能做了這項工作。
在工作中切換到不同的編譯器或環境是不可能的-我只能使用 Visual Studio。
替代方案:
由於我們在網路上找不到版本,讓我們從這裡開始。大多數移植到 Windows 的檔案可能只需要整個 Unix 檔案的子集。
這是一個起點。請根據需要新增定義。
#ifndef _UNISTD_H #define _UNISTD_H 1 /* This is intended as a drop-in replacement for unistd.h on Windows. * Please add functionality as needed. * https://stackoverflow.com/a/826027/1202830 */ #include <stdlib.h> #include <io.h> #include <getopt.h> /* getopt at: https://gist.github.com/ashelly/7776712 */ #include <process.h> /* for getpid() and the exec..() family */ #include <direct.h> /* for _getcwd() and _chdir() */ #define srandom srand #define random rand /* Values for the second argument to access. These may be OR'd together. */ #define R_OK 4 /* Test for read permission. */ #define W_OK 2 /* Test for write permission. */ //#define X_OK 1 /* execute permission - unsupported in windows*/ #define F_OK 0 /* Test for existence. */ #define access _access #define dup2 _dup2 #define execve _execve #define ftruncate _chsize #define unlink _unlink #define fileno _fileno #define getcwd _getcwd #define chdir _chdir #define isatty _isatty #define lseek _lseek /* read, write, and close are NOT being #defined here, because while there are file handle specific versions for Windows, they probably don't work for sockets. You need to look at your app and consider whether to call e.g. closesocket(). */ #ifdef _WIN64 #define ssize_t __int64 #else #define ssize_t long #endif #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 /* should be in some equivalent to <sys/types.h> */ typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; #endif /* unistd.h */
以上是是否有適用於 Windows (Visual C) 的 unistd.h 等效項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!