Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fetish

[Resolvido] System("pstree"), não consigo fazer funcion

Recommended Posts

Bom eu estou criando um programa que usa o system só que nesse system tem uma função que se chama: substr_count e nessa função substr_count, aceita apenas char *, vejam abaixo:

 

printf("%d",substr_count((char *) system("pstree"),"gedit"));

Alguem poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem nao, nao exibiu esse erro na hora de compilar.

Olha de novo :x

Compartilhar este post


Link para o post
Compartilhar em outros sites

O retorno da função é um inteiro dizendo se a função obteve sucesso ou não.

Mas veja...o resultado do comando passado a ela...é o texto que você quer.

Então ou você pega os dados da stdout,ou redireciona o conteudo desse comando para um arquivo,pega o conteudo por C e executa o que você quer,depois se quiser deleta o arquivo.

Tem outras soluções.Essas foram as que vieram a minha mente no momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As idéias do eibon são boas pois são relativamente fáceis, mas são meio pog's... :P :P

O que você quer é criar um pipeline entre o seu processo e o "pstree". Conectar o stdin do seu processo no stdout do "pstree" e ler o output.

 

Como fazer em um nível mais baixo:

http://forum.imasters.com.br/index.php...12&hl=pipes

 

Eu te aconselho a aprender como fazer isso em baixo nível, ao invés de usar a função popen.

Até pq você tem mais "liberdade" ao fazer a sua própria função.

 

Para saber mais: http://www.advancedlinuxprogramming.com/al...lp-ch05-ipc.pdf

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

int main(){
	FILE * fp;
	int fpSize;
	char *buf;

	system("pstree > teste.txt");
	fp = fopen("teste.txt" , "rb");
	if (fp == NULL){
		puts("Erro ao tentar abrir o arquivo para leitura.");
		return 1;
	}
	fseek(fp, 0, SEEK_END);
	fpSize = ftell(fp);
	rewind(fp);
	buf = (char*)malloc(fpSize);
	fread(buf, 1, fpSize, fp);
	fclose(fp);
	remove("teste.txt");
	printf("%s", buf);
	return 0;
}

Gambiarra...a da stdout também.Não sabia até ler o comentário do vitor e a popen da stdin.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fetish

 

Eu te mostrei como fazer da forma correta, e você vai optar pela gambiarra???

Bonito hein... ¬¬

No mais,

Não tou aqui pra discutir questões morais, faça o que você quiser!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Victor

Desculpa velho, mais eu tenho pressa não tenho tempo para ler muita coisa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.