Ir ao conteúdo

Posts recomendados

Postado

Bom dia,

estou tendo problemas com o seguinte código em C:

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

int main(){
	char *ptrMac;//ponteiro para char, para armazenar os dados de arp -a

	FILE *mac; // ponteiro para tipo arquivo
	
	mac = fopen("MACS.txt", "w");  // abrindo/criando arquivo MACS.txt para salvar arp -a

	if(mac == NULL){
		printf("Erro ao abrir/criar arquivo!");  // verifica se abriu/criou corretamente
		}
	
	
	ptrMac = malloc(100*sizeof(char));  //alocando memoria dinamica para o ponteiro char pois n sei quanto vou precisar
	
	ptrMac = (char)system("arp -a");  //tentativa de converter saida do prompt em char
	
	fprintf(mac,ptrMac); // para gravar a string no arquivo
	
	free(ptrMac); // liberando a memoria
	ptrMac = NULL; // setando como nulo por precaução
	
	fclose(mac);// fechando arquivo
	system("pause");
	return 0;
}

Queria gravar a saida do system("arp -a") em um arquivo txt, por ser preguiçoso mesmo. Porém assim não funciona. 
Tirei a duvida com um professor da faculdade e ele me disse que preciso encontrar um ponteiro na biblioteca Windows.h que seja responsavel pela saida no prompt, agora minha dúvida é qual ponteiro é esse e como encontra-lo. Ou se alguém souber outro metodo que funcione da mesma forma eu agradeço muito!

 

Att. Vitor.

Postado

@Vitor Coutinho Fernandes você também pode usar popen()

#include <iostream>
#include <string>
#include <array>
#include <memory>
#include <fstream>
#include <stdexcept>

#ifdef _WIN32
#define POPEN(_ln, _md) _popen(_ln, _md)
#define PCLOSE _pclose
#elif __linux__
#define POPEN(_ln, _md) popen(_ln, _md)
#define PCLOSE pclose
#endif

std::string exec(const char* cmd)
{
	std::array<char, 512> buffer;
	std::string result;
	std::shared_ptr<FILE> pipe(POPEN(cmd, "r"), PCLOSE);
	if (!pipe) throw std::runtime_error("popen() failed!");
	while (!feof(pipe.get()))
	{
		if (fgets(buffer.data(), buffer.size(), pipe.get()) != NULL)
			result += buffer.data();
	}
	return result;
}

int main(void)
{
	std::string result = exec("arp -a");

	std::ofstream file;
	file.open("output.txt");
	file.write(reinterpret_cast<char*>(&result[0]), result.size());
	file.close();

	return 0;
}

 

  • Curtir 1
Postado
1 hora atrás, vangodp disse:

system("arp -a > arquivo.txt") igual você faria no prompt. talvez você tenha que usar path ou a rota completa tipo c:\uma pasta\ outra pasta.... arquivo.txt

 

OBRIGADO CARA!! Salvou minha vida de uma maneira muito simples. Fiz tambem um arquivinho em bat que é mais simples só pra testar e funciona perfeitamente, o legal é que ele ja cria o arquivo na hora, sem a necessidade de ja ter um pra passar os ips listados. Muito obrigado mesmo.

Postado

No console também tem a opção de usar o operador >> que apenas adiciona o texto ao final do arquivo, ao invés de sobrescrever o conteúdo atual.

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!