Curso de programación en C moderno

Anuncio
Portada
argc y argv
Ejemplo
getopt
getopt short
Curso de programación en C moderno
(II Edición)
getopt long
Neira Ayuso, Pablo
Falgueras García, Carlos
Tema 8
Argumentos de main
Índice
Portada
argc y argv
Ejemplo
getopt
1 argc y argv
Ejemplo
getopt short
getopt long
2 getopt
3 getopt short
4 getopt long
argc y argv
Portada
argc y argv
int main(int argc , char ∗argv [])
Ejemplo
getopt
getopt short
getopt long
• La función main admite dos parámetros que están
relacionados con los argumentos que pasamos a nuestro
programa al ejecutarlo:
• argc: Número de argumentos pasados
• argv: Vector de argumentos
• Cada argumento es una cadena de texto
• Siempre se pasa al menos un argumento con el nombre del
programa (incluida la ruta relativa de llamada)
Ejemplo
código:
Portada
1
argc y argv
Ejemplo
getopt
getopt short
getopt long
2
3
int main ( int argc , char * argv [])
{
int i ;
4
5
printf ( " Argumento i = < argumento >\ n " ) ;
for ( i = 0; i < argc ; i ++)
printf ( " % d = % s \ n " , i , argv [ i ]) ;
6
7
8
9
10
return 0;
}
salida:
# >./ args_example foo bar
Argumento i = < argumento >
0 = ./ args_example
1 = foo
2 = bar
getopt
Portada
argc y argv
Ejemplo
getopt
getopt short
getopt long
• Es una utilidad de GNU C Library
• Sigue el estándar POSIX sobre argumentos
• Permite analizar los argumentos fácilmente
getopt short
Portada
argc y argv
Ejemplo
getopt
getopt short
getopt long
> gopts -a -b 3 -c hola
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#i n c l u d e < s t d i o . h>
#i n c l u d e < s t d l i b . h>
#i n c l u d e < u n i s t d . h>
i n t main ( i n t a r g c ,
{
int aflag ;
int bvalue ;
char ∗ cvalue ;
int c ;
c h a r ∗∗ a r g v )
w h i l e ( ( c = g e t o p t ( a r g c , a r g v , " ab : c : " ) ) != −1) {
switch ( c )
{
case ' a ' :
aflag = 1;
break ;
case 'b ' :
b v a l u e = s t r t o l ( o p t a r g , NULL , 0 ) ;
break ;
case ' c ' :
cvalue = optarg ;
break ;
default :
r e t u r n EXIT_FAILURE ;
}
}
getopt short
Portada
argc y argv
Ejemplo
getopt
getopt short
getopt long
30
31
32
33
34
35
36
37 }
p r i n t f ( " b v a l u e = %d \ n " , b v a l u e ) ;
p r i n t f ( " c v a l u e = \"% s \"\ n " , c v a l u e ) ;
f o r ( i n t i = o p t i n d ; i < a r g c ; i ++)
p r i n t f ( " Argumento d e s c o n o c i d o \"% s \"\ n " , a r g v [ i ] ) ;
return
0;
> gopts -a -b 3 -c hola
aflag = 1
bvalue = 3
cvalue = " hola "
getopt long
Portada
> goptl -u -w 10 -h 20 --random=52432
argc y argv
Ejemplo
getopt
getopt short
getopt long
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
< s t d i o . h>
< s t d l i b . h>
< s t d b o o l . h>
<g e t o p t . h>
i n t main ( i n t a r g c , c h a r ∗∗ a r g v )
{
s t a t i c i n t usage = f a l s e ;
s i z e _ t width , h e i g h t ;
b o o l random = f a l s e ;
int rseed ;
i n t option_index = 0;
int c ;
s t a t i c s t r u c t option long_options [ ]
{
{" usage " ,
no_argument ,
0,
{" width " ,
required_argument , 0 ,
{" h e i g h t " , required_argument , 0 ,
{ " random " , o p t i o n a l _ a r g u m e n t , 0 ,
{ 0 , 0 , 0 , 0}
};
=
'u ' } ,
'w ' } ,
'h ' } ,
'r '},
getopt long
Portada
argc y argv
Ejemplo
getopt
getopt short
getopt long
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
while
}
( ( c = g e t o p t _ l o n g ( a r g c , a r g v , "uw : h : r : : " , l o n g _ o p t i o n s ,
&o p t i o n _ i n d e x ) ) != −1) {
switch ( c ) {
case 'u ' :
usage = t r u e ;
break ;
c a s e 'w ' :
w i d t h = s t r t o l ( o p t a r g , NULL , 0 ) ;
break ;
case 'h ' :
h e i g h t = s t r t o l ( o p t a r g , NULL , 0 ) ;
break ;
case ' r ' :
random = t r u e ;
i f ( optarg )
r s e e d = s t r t o l ( o p t a r g , NULL , 0 ) ;
break ;
case ' ? ' :
/∗ g e t o p t _ l o n g i m p r i m e un m e n s a j e de e r r o r ∗/
break ;
default :
p r i n t f ( " E r r o r \n" ) ;
e x i t ( EXIT_FAILURE ) ;
}
getopt long
Portada
argc y argv
Ejemplo
getopt
getopt short
getopt long
51
52
53
54
55
56
57
58
59
60
61 }
printf
printf
printf
printf
printf
( " usage
( " width
(" height
( " random
(" rseed
=
=
=
=
=
%s \ n " ,
%l u \ n "
%l u \ n "
%s \ n " ,
%d \ n " ,
u s a g e ? "TRUE" : "FALSE" ) ;
, width ) ;
, height ) ;
random ? "TRUE" : "FALSE" ) ;
rseed ) ;
f o r ( i n t i = o p t i n d ; i < a r g c ; i ++)
p r i n t f ( " Argumento d e s c o n o c i d o : \"% s \"\ n " , a r g v [ i ] ) ;
e x i t (0) ;
> goptl -u -w 10 -h 20 -- random =52432
usage = TRUE
width = 10
height = 20
random = TRUE
rseed = 52432
Descargar