Executar comando Linux em programa C

1. Executar comando Linux em programa C

Valter Ribeiro Lima jr.
valtincomp

(usa Ubuntu)

Enviado em 06/09/2013 - 12:57h

Olá amigos do VOL!

Estou com um problema e gostaria da ajuda de vocês. Estou desenvolvendo um código que manipula arquivos, e depois de fazer algumas filtragens nesse arquivos eu preciso ordená-lo. Porém, não quis implementar nenhum método de ordenação e acabei escolhendo utilizar o comando sort do Linux. A questão é que notei que o comando não funciona, pois o arquivo que preciso ordenar já foi utilizado no código. Alguém sabe como resultar esse problema?

Código:

int main()
{
FILE *urls;
FILE *saida;
char origem[400];
char destino[400];
char *saida_origem;
char *saida_destino;
Link aresta[MAX_ARESTAS];
char vet_sites[500][100];
int quant_site = 1;
int i = 1;

urls = fopen("_ListaURL", "r");
saida = fopen("_SaidaSites", "w");

while (!feof(urls))
{
fscanf(urls, "%s %s\n", origem, destino);

aresta[i].origem = (char *) malloc(100 * sizeof(char));
aresta[i].destino = (char *) malloc(100 * sizeof(char));

extraiSite(origem, destino, aresta[i].origem, aresta[i].destino);
fprintf(saida, "%s %s\n", aresta[i].origem, aresta[i].destino);
mapeiaSites(vet_sites, aresta[i].origem, aresta[i].destino, &quant_site);

i++;
}
fclose(saida);
fclose(urls);

system("sort -k1,2 _SaidaSites | tee _SaidaSitesOrdenados");

imprimeSites(vet_sites, quant_site);
enumeraSites(vet_sites, aresta, quant_site);

printf("Pressione ENTER para sair...");
getchar();
}


  


2. Re: Executar comando Linux em programa C

Tulio Amancio
tsuriu

(usa Manjaro Linux)

Enviado em 06/09/2013 - 13:17h

Percebi que já esta usando a função system(). Mas só pra conferir, esta usando a biblioteca a qual ela pertence? Neste caso seria a stdlib.h


3. Re: Executar comando Linux em programa C

Valter Ribeiro Lima jr.
valtincomp

(usa Ubuntu)

Enviado em 06/09/2013 - 15:47h

Sim estou usando a stdlib.h, o problema é que o comando não executa por eu já ter usado o arquivo que vou manipular no código.


4. Re: Executar comando Linux em programa C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/09/2013 - 18:15h

Prezado valtincomp,

Edite sua postagem original, colocando a tag [code] antes da primeira linha do código em C, e a tag [/code] ao final do código. Desse jeito, ele vai ficar mais bem formatado e fácil de ler.

Com relação ao programa em si, você poderia usar popen() ou pipe() para enviar a sua saída diretamente ao comando sort(), sem criar um arquivo intermediário.

Melhor que isso, porém, e já que arestas parece ser um array (e não uma lista encadeada), seria você ordenar esse array dentro do programa. Você não precisa construir o algoritmo de ordenação: poderia usar a função padrão qsort(), que implementa naturalmente o Quicksort; você possivelmente só teria de criar a função de comparação entre os elementos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts