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;
}