unistd sirve que para c++ c windows portability unistd.h

c++ - sirve - ¿Hay un reemplazo para unistd.h para Windows(Visual C)?



unistd.h download (6)

Estoy portando un programa de consola relativamente simple escrito para Unix a la plataforma de Windows ( Visual C ++ 8.0 ). Todos los archivos de origen incluyen "unistd.h", que no existe. Al eliminarlo, recibo quejas sobre la falsificación de prototipos para ''srandom'', ''random'' y ''getopt''. Sé que puedo reemplazar las funciones aleatorias, y estoy bastante seguro de que puedo encontrar / piratear una implementación de getopt.

Pero estoy seguro de que otros se han encontrado con el mismo desafío. Mi pregunta es: ¿hay un puerto de "unistd.h" para Windows? Al menos uno que tenga funciones que tengan una implementación nativa de Windows, no necesito tuberías ni bifurcaciones.

EDITAR :

Sé que puedo crear mi propio "unistd.h" que contiene reemplazos para las cosas que necesito, especialmente en este caso, ya que es un conjunto limitado. Pero dado que parece un problema común, me preguntaba si alguien ya había hecho el trabajo para un subconjunto más grande de la funcionalidad.

Cambiar a un compilador o entorno diferente no es posible en el trabajo. Estoy atascado con Visual Studio.


Como no podemos encontrar una versión en Internet, comencemos una aquí.
La mayoría de los puertos para Windows probablemente solo necesiten un subconjunto del archivo Unix completo.
Aquí hay un punto de partida. Por favor agregue definiciones según sea necesario.

#ifndef _UNISTD_H #define _UNISTD_H 1 /* This is intended as a drop-in replacement for unistd.h on Windows. * Please add functionality as neeeded. * https://.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 */


Cree su propio encabezado unistd.h e incluya los encabezados necesarios para los prototipos de funciones.


Intente incluir el archivo io.h Parece ser el equivalente de Visual Studio de unistd.h .

Espero que esto ayude.


Me encontré con este hilo mientras trataba de encontrar una alternativa de Windows para getpid() (definido en unistd.h ). Resulta que incluir process.h hace el truco. Tal vez esto ayude a las personas que encuentren este hilo en el futuro.


No, IIRC no hay getopt() en Windows.

Boost , sin embargo, tiene la biblioteca program_options ... que funciona bien. Al principio parecerá exagerado, pero no es terrible, especialmente considerando que puede manejar la configuración de opciones de programas en archivos de configuración y variables de entorno además de las opciones de línea de comandos.


Recomendaría usar mingw/msys como entorno de desarrollo. Especialmente si está portando programas de consola simples. Msys implementa un shell tipo Unix en Windows, y mingw es un puerto de la colección de compiladores de GNU (GCC) y otras herramientas de compilación de GNU para la plataforma de Windows. Es un proyecto de código abierto y adecuado para la tarea. Actualmente lo uso para crear programas de utilidad y aplicaciones de consola para Windows XP, y ciertamente tiene el encabezado unistd.h que está buscando.

El procedimiento de instalación puede ser un poco complicado, pero descubrí que el mejor lugar para comenzar es en MSYS .