Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getopt.h: Compiling Linux C-Code in Windows

I am trying to get a set of nine *.c files (and nine related *.h files) to compile under Windows.

The code was originally designed in Linux to take command line arguments using the standard GNU-Linux/C library "getopt.h". And that library does not apply to building the C-code in Windows.

I want to ignore what my code does right now and ask the following question. For those of you familiar with this C-library "getopt.h": will it be possible to build and run my code in Windows if it depends on POSIX-style command-line arguments? Or will I have to re-write the code to work for Windows, passing input files differently (and ditching the "getopt.h" dependency)?

like image 617
john_science Avatar asked May 01 '12 21:05

john_science


People also ask

Does getopt work on Windows?

getopt. h and getopt. c is very often used in linux, to make it easy for windows user, two files were extracted from glibc. In order to make it works properly in windows, some modification was done and you may compare the change using original source files.

What does getopt do in C?

The getopt() function is a builtin function in C and is used to parse command line arguments. Syntax: getopt(int argc, char *const argv[], const char *optstring) optstring is simply a list of characters, each representing a single character option.

What is getopt H?

getopt is a C library function used to parse command-line options of the Unix/POSIX style. It is a part of the POSIX specification, and is universal to Unix-like systems. It is also the name of a Unix program for parsing command line arguments in shell scripts.

What is Optind in C?

The optind variable is the index value of the next argument that should be handled by the getopt() function. opterr will let you control if the getopt() function should print errors to the console.


1 Answers

getopt() is actually a really simple function. I made a github gist for it, code from here is below too

#include <string.h> #include <stdio.h>  int     opterr = 1,             /* if error message should be printed */   optind = 1,             /* index into parent argv vector */   optopt,                 /* character checked for validity */   optreset;               /* reset getopt */ char    *optarg;                /* argument associated with option */  #define BADCH   (int)'?' #define BADARG  (int)':' #define EMSG    ""  /* * getopt -- *      Parse argc/argv argument vector. */ int   getopt(int nargc, char * const nargv[], const char *ostr) {   static char *place = EMSG;              /* option letter processing */   const char *oli;                        /* option letter list index */    if (optreset || !*place) {              /* update scanning pointer */     optreset = 0;     if (optind >= nargc || *(place = nargv[optind]) != '-') {       place = EMSG;       return (-1);     }     if (place[1] && *++place == '-') {      /* found "--" */       ++optind;       place = EMSG;       return (-1);     }   }                                       /* option letter okay? */   if ((optopt = (int)*place++) == (int)':' ||     !(oli = strchr(ostr, optopt))) {       /*       * if the user didn't specify '-' as an option,       * assume it means -1.       */       if (optopt == (int)'-')         return (-1);       if (!*place)         ++optind;       if (opterr && *ostr != ':')         (void)printf("illegal option -- %c\n", optopt);       return (BADCH);   }   if (*++oli != ':') {                    /* don't need argument */     optarg = NULL;     if (!*place)       ++optind;   }   else {                                  /* need an argument */     if (*place)                     /* no white space */       optarg = place;     else if (nargc <= ++optind) {   /* no arg */       place = EMSG;       if (*ostr == ':')         return (BADARG);       if (opterr)         (void)printf("option requires an argument -- %c\n", optopt);       return (BADCH);     }     else                            /* white space */       optarg = nargv[optind];     place = EMSG;     ++optind;   }   return (optopt);                        /* dump back option letter */ } 
like image 109
bobobobo Avatar answered Oct 07 '22 02:10

bobobobo