Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #108128

Re: main()

From scott@slp53.sl.home (Scott Lurndal)
Subject Re: main()
Newsgroups comp.lang.c
References <ecUHA.285656$15.165152@fx07.am4>
Message-ID <dI3IA.10330$sn6.1876@fx44.iad> (permalink)
Organization UsenetServer - www.usenetserver.com
Date 2017-04-14 12:58 +0000

Show all headers | View raw


bartc <bc@freeuk.com> writes:
>I think this is not strictly part of the language but someone here may 
>happen to know how it's done.
>
>The arguments to a programs entry point such as main(int n, char** args) 
>are not set up by the OS, but by some function the C implementation 
>arranges.
>
>On Windows at least, where such a function might use GetCommandLine() or 
>__getmainargs() to obtain the command-line arguments and pass them to 
>main().
>
>What's the equivalent on Linux? Or will those args just magically be on 
>the stack anyway? (Because after all Linux and C are very.. close.)
>

Unix and unix-like systems get the arguments from the system
call used to create the process.   Typically this is one of
the exec-family of system calls.

http://pubs.opengroup.org/onlinepubs/9699919799/functions/execv.html

The path argument provides the cwd-relative (or absolute) path to
the ELF (or COFF in the olden days) binary.   The ELF header has
a field which records the virtual address of the entry point.  That
virtual address refers (generally) to the label _start in in the
c-runtime initialization code, which handles various pre-main setup
activities then invokes main with the following signature:

  int main(int argc, const char **argv, const char **envp, Elf32_auxv_t **auxv)

envp contains a list of all exported environment variables and their
values.   auxv conveys information from the run-time ELF loader.

http://articles.manugarg.com/aboutelfauxiliaryvectors

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

main() bartc <bc@freeuk.com> - 2017-04-14 00:53 +0100
  Re: main() Robert Wessel <robertwessel2@yahoo.com> - 2017-04-13 19:10 -0500
  Re: main() antispam@math.uni.wroc.pl - 2017-04-14 02:51 +0000
  Re: main() scott@slp53.sl.home (Scott Lurndal) - 2017-04-14 12:58 +0000
    Re: main() bartc <bc@freeuk.com> - 2017-04-14 14:11 +0100
      Re: main() Malcolm McLean <malcolm.mclean5@btinternet.com> - 2017-04-15 07:53 -0700
        Re: main() supercat@casperkitty.com - 2017-04-15 08:43 -0700
        Re: main() Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-04-15 16:50 +0100
        Re: main() Keith Thompson <kst-u@mib.org> - 2017-04-15 15:31 -0700
        Re: main() gordonb.y2etp@burditt.org (Gordon Burditt) - 2017-04-16 00:19 -0500
    The exec*() family (Was: main()) gazelle@shell.xmission.com (Kenny McCormack) - 2017-04-15 17:01 +0000
  Re: main() Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2017-04-14 10:04 -0400
    Re: main() bartc <bc@freeuk.com> - 2017-04-14 15:52 +0100
      Re: main() scott@slp53.sl.home (Scott Lurndal) - 2017-04-14 15:00 +0000
      Re: main() Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2017-04-14 13:49 -0400

csiph-web