Rumah >pembangunan bahagian belakang >C++ >Adakah Terdapat Setara unistd.h untuk Windows (Visual C )?

Adakah Terdapat Setara unistd.h untuk Windows (Visual C )?

Susan Sarandon
Susan Sarandonasal
2024-12-11 10:33:14735semak imbas

Is There a unistd.h Equivalent for Windows (Visual C  )?

Adakah terdapat pengganti untuk unistd.h dalam Windows (Visual C)?

Untuk mengalihkan program konsol yang agak ringkas yang ditulis untuk Unix ke platform Windows (Visual C 8.0), semua fail sumber termasuk "unistd.h" yang tidak wujud dalam Windows. Selepas mengalih keluarnya, sistem mengadu bahawa prototaip untuk 'rawak', 'rawak' dan 'getopt' tidak ditemui.

Saya faham bahawa saya boleh menggantikan fungsi rawak, dan saya pasti saya boleh mencari/mendapatkan pelaksanaan getopt.

Tetapi saya percaya orang lain pernah menghadapi cabaran yang sama. Soalan saya ialah: Adakah terdapat port "unistd.h" ke Windows? Sekurang-kurangnya fungsi yang mempunyai pelaksanaan asli Windows harus disertakan, saya tidak memerlukan paip atau forking.

Edit:

Saya tahu saya boleh mencipta "unistd.h" saya sendiri yang mengandungi penggantian untuk apa yang saya perlukan, terutamanya dalam kes ini kerana ia adalah terhad koleksi. Tetapi memandangkan ia seolah-olah menjadi masalah biasa, saya tertanya-tanya sama ada sesiapa telah melakukan ini untuk pelbagai fungsi yang lebih luas.

Bertukar kepada pengkompil atau persekitaran yang berbeza semasa kerja tidak boleh dilakukan - Saya hanya boleh menggunakan Visual Studio.

Alternatif:

Memandangkan kami tidak dapat mencari versi di internet, mari mulakan di sini. Kebanyakan fail yang dialihkan ke Windows mungkin hanya memerlukan subset daripada keseluruhan fail Unix.

Ini adalah titik permulaan. Sila tambah definisi mengikut keperluan.

#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  */

Atas ialah kandungan terperinci Adakah Terdapat Setara unistd.h untuk Windows (Visual C )?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn