Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #108128
| 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 |
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
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