Linguagem C : Arquivos por linha de comando – Argc e Argv
Postado em | fevereiro 5, 2010 | 7 Comments
E aí pessoal! Tudo bem com vocês? Espero que sim! Bem, hoje nós vamos aprender um pouco mais sobre a linguagem C, e o assunto de hoje é : Manipulando arquivos através da linha de comando (Argc e Argv) .
Talvez você ainda não tenha pensado em algo parecido com o que vou falar adiante. Mas imagine. Muitas vezes, seria bastante útil se pudéssemos “conversar” com um programa no momento em que o executamos, fornecendo-o informações para que ele efetuasse determinada ação! Na linguagem C, isso é possível: Essas informações podem ser passadas para o programa através da função principal, que se chama main(), na linha de comando.
Então vejamos: Quando vamos executar um programa,no linux por exemplo, nós o chamamos da seguinte forma no terminal: “./nomedoprograma” (sem as aspas). Se quisermos passar alguma informação para este programa no mesmo momento em que o chamamos, faríamos assim: “./nomedoprograma informacao1 informacao 2[...]” que na verdade seriam os argumentos para a função main().
Entendido isso, precisamos saber que existem dois argumentos internos a essa função que são usados para receber as informações vindas da linha de comando. Vamos falar do primeiro: Argument Counter(Argc).
O Argument Counter representa a quantidade de argumentos (informações) que você forneceu ao seu programa. Esse argumento, trata-se de um número inteiro e é NO MÍNIMO 1 porque o nome do programa é considerado o primeiro argumento. Esse argumento tem a função de CONTAR a quantidade de argumentos que você forneceu. Ok?
Por exemplo: Se você chamar por somente “./nomedoprograma”, o seu Argc já é 1, pois o nome do programa também é contabilizado. Caso fosse “./nomedoprograma argumento1″ o seu Argc valeria 2. E assim por diante. E o outro argumento interno, chama-se Argument Values (Argv), que trata-se de um PONTEIRO de PONTEIRO, ou melhor, de um ponteiro para uma matriz de ponteiros para caractere. Complicou? Vamos tentar descomplicar através do nosso exemplo.
Vamos comentar blocos de um programinha bem simples por sinal, que terá a função de escrever uma string (vetor de caractere) em um arquivo de texto, sendo que esta string será passada para que o programa possa escrevê-la em um arquivo de texto através da linha de comando.
Passaremos 3 argumentos pela linha de comando para o nosso programa, ou seja, o nosso Argc terá valor 3. Chamaremos o programa na linha de comando passando o caractere I(de Inserir) e a string entre aspas que será escrita no arquivo de texto, dessa forma: ./nomedoprograma I “Thiago Ribeiro” Vamos ao código do programa:
#include #include #define T 60 /*Definição de constante. O programa colocará 60 onde tiver T no programa.*/ typedef char string[T]; /*Definição de tipo. Como em C não existe o tipo string, podemos criá-lo. Quando quisermos criar uma string com no máximo T caracteres, basta fazer como em qualquer outro tipo já conhecido como int. Exemplo: String nome;*/ void incluir (FILE *fp, string str) //Função que tem por parâmetro a string que deseja-se inserir no arquivo { //e o descritor do arquivo. Usamos a função fprintf para escrever a fprintf(fp,"%s\n",str); //string no arquivo } int main (int argc,char *argv[]) { FILE *fp; /*Descritor do arquivo*/ char opcao; /*Variável que serve pra armazenar a opção passada na linha de comando que no nosso caso será I de inserir*/ if (argc < 3) /*Verifica se o usuário passou a quantidade correta de argumentos*/ { printf("Erro. Uso incorreto\n"); printf("Maneira adequada: ./nomedoprograma caractere string\n"); exit(1); } fp = fopen("saida.txt","a+"); //Abre o arquivo saida.txt que conterá os nomes no modo anexo. if (fp == NULL) // Caso fopen retorne NULO, ou seja, não consiga abrir o arquivo. { printf("Erro ao tentar abrir o arquivo!\n"); exit(1); } opcao = argv[1][0]; //O 0 significa a primeira posição da string. Se colocassemos Incluir em vez de // I, nos iriamos capturar somente o I. O I significa a primeira posicao do switch(opcao) { // segundo argumento. ./nomedoprograma (0) I(1, na posicao 0. Se quissesemos o n case 'I': // em In por exemplo, seria argv[1][1]) "Teste"(2) incluir(fp,argv[2]); break; } fclose (fp); //função para fechar o arquivo. return 0; }
Compilando o programa e passando as devidas informações pela linha de comando, veja a figura:
*Feito isso, será gerado o nosso arquivo de texto chamado “saída.txt” e dentro dele, estará contida a string “Thiago Ribeiro”. E se você repetir o processo para uma nova string, a mesma será colocada abaixo de “Thiago Ribeiro”. Download do código do programa: Clique aqui
Bem pessoal, por hoje é só. Qualquer dúvida sua, ou equívoco meu, favor comunicar. Obrigado pelos comentários no post anterior, e eu espero que tenha ajudado com mais este artigo. Um grande abraço, e até mais!
Comente este artigo:
7 comentários em “Linguagem C : Arquivos por linha de comando – Argc e Argv”
Deixe um comentário


fevereiro 6th, 2010 @ 3:25
Isso aê, Tico!
Boa iniciativa a sua, cara! O site/blog está bem interessante!! Vai em frente que sei que ainda tem muita coisa legal por vir!
abração
fevereiro 11th, 2010 @ 13:15
Acho, muito importante, os seus comentários, continue assim muito legal mesmo. Parabéns
março 19th, 2010 @ 13:41
E ai…gostei do seu artigo.
Tenho uma dúvida sobre este assunto, você me permite??
Tenho um programa (*).c que vai ler os arquivos de entrada (*).txt
No windows estou usando o MinGW.
Em ambos os casos o pragrama será executado se escrevermos os comandos:
C:\Mingw\bin>gcc (*).c -o (*)
C:\Mingw\bin>.\(*) (*).txt
O programa deveria retornar um resultado de acordo com o programa (*).c
Mas isto não esta ocorrendo…falta algum comando ou tennho que configurar o MinGW
março 21st, 2010 @ 13:16
E aí Eduardo. Primeiramente obrigado, fico feliz por ter gostado! Então vejamos o que pode estar ocorrendo: apesar de ter programado pouquíssimas vezes em C no windows, pelo que você escreveu me parece que você está colocando um “.\” para chamar o programa passando um arquivo .txt pela linha de comando. Porém, a maneira como você está chamando-o está equivocada.
No windows, você deve chamar o programa compilado digitando apenas o seu nome, e no seu caso, passando um arquivo para o mesmo da seguinte forma: “teste arquivo.txt” sem o “.\” que na verdade teria de ser “./” em se tratando de linux/mac. Outro detalhe importante é o diretório. Se o arquivo (*).c que você está tentando compilar foi salvo em outra lugar se não o especificado no terminal, ele não será compilado. Bem, espero ter ajudado.
Até mais,
Thiago Ribeiro
abril 26th, 2010 @ 23:33
oi, pra tentar ver se ajuda o amigo, creio que se colocar o operação de redirecionamento ‘<'. ai quando for chamar o programa faz:
prog.exe < file.txt
Se você fez as leituras corretas de acordo com o arquivo, ele vai armazenar os dados em variáveis numa boa.
flws
maio 16th, 2010 @ 18:09
Vlw cara, Mto bom, me ajudou mto!!
maio 18th, 2010 @ 15:40
Grande Arthur! =) obrigado por ter gostado! Espero poder sempre ajudar. Um grande abraço!