I am trying to communicate with the hardware by passing some command line arguments. I have error checking if I pass wrong arguments. But whenever I pass some unrecognized argument I am getting error : ORBIT_SOCKETDIR=/tmp/orbit-root
. I opened this location and it has some socket files. Moreover the error checking in my code is working fine and I am exiting when wrong argument encountered.
I tried searching on Google but could not find a satisfactory explanation.
Can Anyone Help Me here.
Asked
Active
Viewed 332 times
0

Heena Goyal
- 382
- 3
- 17

lokesharo
- 305
- 2
- 11
1 Answers
0
Happened to me today.
Arguments passed to the program are stored inside something called process environment block. When no arguments are actually passed to main and it's trying to access them in argv it just reads the next elements in the block(I found more info here: https://stackoverflow.com/a/26417129/3922692)
Then I wrote this:
⚡⚡⚡ more test.c
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
for(i = 0; i < 100; i++)
{
printf("argv[%d] contains %s \n", i, argv[i]);
}
return 0;
}
When I run it without arguments:
⚡⚡⚡ ./a.out
argv[0] contains ./a.out
argv[1] contains (null)
argv[2] contains ORBIT_SOCKETDIR=/tmp/orbit-ehwas
argv[3] contains SSH_AGENT_PID=2443
argv[4] contains TERM=xterm-256color
argv[5] contains SHELL=/bin/bash
argv[6] contains XDG_SESSION_COOKIE=3f606f46028152e69e3d858900000009-1422008859.843197-1908595864
argv[7] contains WINDOWID=39845891
argv[8] contains GNOME_KEYRING_CONTROL=/tmp/keyring-nNCd02
argv[9] contains GTK_MODULES=canberra-gtk-module
argv[10] contains USER=ehwas
argv[11] contains LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
argv[12] contains SSH_AUTH_SOCK=/tmp/ssh-ELberD2392/agent.2392
argv[13] contains USERNAME=ehwas
argv[14] contains DESKTOP_SESSION=openbox
argv[15] contains PATH=/home/ehwas/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
argv[16] contains GDM_XSERVER_LOCATION=local
argv[17] contains PWD=/home/ehwas
argv[18] contains LANG=en_US.UTF-8
argv[19] contains GNOME_KEYRING_PID=2382
argv[20] contains GDM_LANG=en_US.UTF-8
argv[21] contains GDMSESSION=openbox
argv[22] contains SHLVL=1
argv[23] contains HOME=/home/ehwas
argv[24] contains LOGNAME=ehwas
argv[25] contains DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-sP7BGFlECg,guid=fd8e2dfe17f3d2888c471c0e00000026
argv[26] contains XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/
argv[27] contains WINDOWPATH=7
argv[28] contains DISPLAY=:0.0
argv[29] contains COLORTERM=gnome-terminal
argv[30] contains XAUTHORITY=/home/ehwas/.Xauthority
argv[31] contains _=./a.out
argv[32] contains (null)
Segmentation fault
And with arguments:
⚡⚡⚡ ./a.out test test test test
argv[0] contains ./a.out
argv[1] contains test
argv[2] contains test
argv[3] contains test
argv[4] contains test
argv[5] contains (null)
argv[6] contains ORBIT_SOCKETDIR=/tmp/orbit-ehwas
argv[7] contains SSH_AGENT_PID=2443
argv[8] contains TERM=xterm-256color
argv[9] contains SHELL=/bin/bash
argv[10] contains XDG_SESSION_COOKIE=3f606f46028152e69e3d858900000009-1422008859.843197-1908595864
argv[11] contains WINDOWID=39845891
argv[12] contains GNOME_KEYRING_CONTROL=/tmp/keyring-nNCd02
argv[13] contains GTK_MODULES=canberra-gtk-module
argv[14] contains USER=ehwas
argv[15] contains LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
argv[16] contains SSH_AUTH_SOCK=/tmp/ssh-ELberD2392/agent.2392
argv[17] contains USERNAME=ehwas
argv[18] contains DESKTOP_SESSION=openbox
argv[19] contains PATH=/home/ehwas/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
argv[20] contains GDM_XSERVER_LOCATION=local
argv[21] contains PWD=/home/ehwas
argv[22] contains LANG=en_US.UTF-8
argv[23] contains GNOME_KEYRING_PID=2382
argv[24] contains GDM_LANG=en_US.UTF-8
argv[25] contains GDMSESSION=openbox
argv[26] contains SHLVL=1
argv[27] contains HOME=/home/ehwas
argv[28] contains LOGNAME=ehwas
argv[29] contains DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-sP7BGFlECg,guid=fd8e2dfe17f3d2888c471c0e00000026
argv[30] contains XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/
argv[31] contains WINDOWPATH=7
argv[32] contains DISPLAY=:0.0
argv[33] contains COLORTERM=gnome-terminal
argv[34] contains XAUTHORITY=/home/ehwas/.Xauthority
argv[35] contains _=./a.out
argv[36] contains (null)
Segmentation fault
TLDR: Before using argv one should check what is in argc or at least if argv[1] is null (that means there are no arguments passed)