segunda-feira, 13 de junho de 2011

Interagindo com o sistema

Vamos tentar enviar alguns comandos para a linha de comando, dentro de nosso programa em C. O programa foi criado e testado em um sistema Debian.

Vamos ao código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
int  MostraOpcoes()  //mostra as opções que vamos implementar e retorna o valor digitado pelo usuário
{
    int opcao;
    printf("\n1 - Lista diretorios");
    printf("\n2 - Cria diretorio");
    printf("\n3 - Cria arquivo");
    printf("\n4 - Deleta diretorio");
    printf("\n\tDigite a opcao:\t");
    scanf("%d",&opcao);

    return opcao;
}

void ExecutaComandos(int opcao)
{
    char dir[50], cmd[50];
    int op;
    int ret;
    struct stat files;
    FILE * arquivo;
    switch(opcao)
    {
        case 1: printf("\n\tListando\n"); //apenas lista o diretório
                system("ls -la"); //usamos o comando system que enviará o comando para o sistema
                break;
        case 2: printf("\n\tCriando Diretorio\n"); //vamos ler o nome do diretório a ser criado
                printf("\n\tInforme o nome do diretorio: ");
                scanf("%s",dir);
                sprintf(cmd, "mkdir %s",dir);
                if(stat(dir,&files)==0) //Vamos verificar se ele existe
                {
                    printf("\nO arquivo ja existe!!!\nDeseja Remove-lo? 1-Sim\t");
                    scanf("%d", &op);
                    if(op == 1) //caso ele existe e o usuário desejar apagar, vamos remover o diretório e criar novamente
                    {
                        sprintf(cmd,"rm -r %s",dir);  //cmd recebe a string rm -r + o conteúdo de "dir"
                        system(cmd);
                        sprintf(cmd, "mkdir %s",dir);
                        system(cmd);
                    }
                }

                else
                    ret = system(cmd);


                break;
        case 3: printf("\n\tInforme o nome do arquivo:\t"); //vamos criar um arquivo
                scanf("%s",dir);
                arquivo = fopen(dir,"r"); //aqui é simples, usamos fopen com opção 'r' assim se o arquivo existir vamos informar ao usuário
                if (arquivo != NULL)
                    printf("\nO arquivo ja existe");
                else
                    arquivo = fopen(dir,"w"); //se não existir o criamos
                break;
                fclose(arquivo);

        case 4: printf("\n\tInforme o nome do diretorio:\t"); //apenas excluiremos o diretório
                scanf("%s", dir);
                if(stat(dir,&files)==0)
                {
                    sprintf(cmd,"rm -r %s",dir);
                    system(cmd);
                }
                else
                printf("\nArquivo inexistente!!\n");
                break;
    }

}

int main()
{
    int opcao;
    int continua;
    do
    {
        opcao = MostraOpcoes();
        ExecutaComandos(opcao);
        printf("\n\tPressione 0 para sair:\t");
        scanf("%d",&continua);
    }while(continua !=0);
    return 0;
}

Nenhum comentário:

Postar um comentário