Mostrando postagens com marcador programa em c. Mostrar todas as postagens
Mostrando postagens com marcador programa em c. Mostrar todas as postagens

domingo, 2 de outubro de 2011

Imprimindo variáveis de ambiente (Environment Variables) em seu programa C - Linux

Pessoal,
hoje vamos trabalhar um pouco com as variáveis de ambiente do sistema operacional Linux. Vamos imprimir as variáveis de ambiente na tela, um programa bem simples que vai fazer usado da função "getenv" que prcisa do include: "unistd.h" Essa função é responsável por procurar a variável informada em uma lista de variáveis de ambiente e nos retornar seu valor. Na verdade ele retorna o valor da primeira ocorrência encontrada. Em C para fazermos o acesso as variáveis de ambiente, podemos fazer através de um ponteiro externo, cujo nome é "environ" como pode ser visto no código abaixo:


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>


void imprimeVariaveisDeAmbiente();
void imprimeVariavel(char *var);
int menuDeOpcoes();

extern char** environ;
int main()
{
    int op;
    char  varAmb[40];

    do
    {
        op = menuDeOpcoes();
        switch(op)
        {
            case 1: imprimeVariaveisDeAmbiente();
                    break;
            case 2: printf("\n\tInforme nome da variavel:\t");

                    scanf("%s",varAmb);
                    imprimeVariavel(varAmb);
                    break;
        }
    }while(op<3);

    return 0;
}

void imprimeVariaveisDeAmbiente()
{

    printf("\n\t----Imprimindo varia¡veis de ambiente!!!----");
    char ** pEnviron = environ;
    for(;*pEnviron;*pEnviron++)
    {
        printf("\n%s",*pEnviron);
    }
}

void imprimeVariavel(char *var)
{
    char * result;

    result = getenv(var);
    if(result != NULL)
        printf("\n\tVariavel:\n\t%s",result);
    else
        printf("\n\tNao encontrado!!!");
}

int menuDeOpcoes()
{
    int opcao;
    printf("\n\t1 - Imprimir todas as variaveis;");
    printf("\n\t2 - Inmprimir uma variavel;");
    printf("\n\t3 - Sair");
    printf("\n\tSelecione a opcao:\t");
    scanf("%d",&opcao);
    return opcao;
}

domingo, 4 de setembro de 2011

Programa em C chamando scripts

Olá, hoje vamos trabalhar com programas em C em conjunto com scripts. O objetivo é construir dois scripts, um para criar um arquivo e outro para deletar um arquivo. Esses dois scripts serão chamados pelo nosso programa escrito em c, que será basicamente um MENU que irá usar o comando system para chamada dos scripts.

Primeiro passo - Criação dos scripts
Nome: ArqExiste.sh
Funcionalidade: Ele é quem vai criar o arquivo de acordo com o nome fornecido pelo usuário.
Código:

#!/bin/bash

if [ -a $1 ]
then
echo "O Arquivo ja Existe!!!"
echo "Voce deseja criar um novo? (s/n)"
read op
if [ $op == "s" ]
then
rm -f $1;
touch $1;
fi
else
touch $1
echo "Arquivo criado!!!"
fi

Nosso segundo script
Nome: DeletaArq.sh
Funcionalidade: Excluir o arquivo
Código:

#!/bin/bash
if [ -a $1 ]
then
rm -f $1
else
echo "Arquivo nao Existe!!!"
fi

Na linha de comando você deve fornecer permissão de execução para esses arquivos, então digitie
chmod +x DeletaArq.sh
chmod +x ArqExiste.sh

Bom, agora vamos ao nosso programa em c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXOP 4
int menuOpcoes()
{
    int op; //Armazena opcao seelecionada
    printf("\n\t*****************************\n");
    printf("1 - Criar Arquivo;\n");
    printf("2 - Listar Aqrquivos;\n");
    printf("3 - Remover Arquivo;\n");
    printf("Escolha sua opcao:\t");
    scanf("%d",&op);
    return op;
}

int main()
{
    int ret; //Armazena valores de retorno de comandos
    int op;
    char str[50];
    char buffer[256];

    do
    {
        op = menuOpcoes();
        switch(op)
        {
            case 1: printf("\n\tScript para criacao de arquivo\n\tNome do arquivo:\t");
                    scanf("%s",str);
                    sprintf(buffer, "./ArqExiste.sh %s",str);
                    ret = system(buffer);
                    break;
            case 2: printf("\n\t****Arquivos do diretório****\n");
                    ret = system("ls");
                    break;
            case 3: printf("\n\tScript para excluir arquivo\n\tNome do arquivo:\t");
                    scanf("%s",str);
                    sprintf(buffer, "./DeletaArq.sh %s",str);
                    ret = system(buffer);
                    break;


        }

    }while(op < MAXOP);
    return 0;
}