Autor Tópico: Problemas com system() en c++  (Lida 11244 vezes)

Offline solanoalves

  • Usuário Ubuntu
  • *
  • Mensagens: 398
  • Arch Linux
    • Ver perfil
Re: Problemas com system() en c++
« Resposta #15 Online: 03 de MAR?O de 2007, 17:19 »
é isso ae cara C++ eh meio confuso e eu por enquanto não estou afim de aprender, espero que não seja obrigatório na faculdade também pq quero ficar no C mesmo

Offline Lamego

  • Usuário Ubuntu
  • *
  • Mensagens: 1.943
    • Ver perfil
Re: Problemas com system() en c++
« Resposta #16 Online: 03 de MAR?O de 2007, 18:10 »
Diego,
não é por utilizar cout/cin no lugar de printf/scan que um porgrama passa de C++ para C, o seu programa já era em C (não utilizava objectos) misutrado com operadores de C++ cin/cout.
Na minha opinião saber C é um requisito para aprender C++.
João Luís Marques Pinto
Mais programs e jogos para o Ubuntu

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Problemas com system() en c++
« Resposta #17 Online: 03 de MAR?O de 2007, 18:34 »
Diego,
não é por utilizar cout/cin no lugar de printf/scan que um porgrama passa de C++ para C, o seu programa já era em C (não utilizava objectos) misutrado com operadores de C++ cin/cout.
Na minha opinião saber C é um requisito para aprender C++.

Obrigado pelo esclarecimento estou iniciando agora em programação, se quiser me ajudar nessa caminhada serei grato XD, eu e o solano anda trocando umas ideias a respeito de fazer algum programa so para praticar e trocar conhecimentos, se quiser fazer parte seja muito bem vindo cara t++

Darcamo

  • Visitante
Re: Problemas com system() en c++
« Resposta #18 Online: 04 de MAR?O de 2007, 01:01 »
Resolvi fazer uma versão em C++ com a mesma finalidade do seu programa. Certamente várias melhorias ainda podem ser feitas como, por exemplo, implementar testes para saber se o path e o nome da imagem estão corretos, se a pasta fornecida como ponto de montagem existe (e se não existir criá-la), etc. Mas a idéia é ser simples pra ficar fácil de entender.

Arquivo main
Código: [Selecionar]
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include "mounter.h"

using namespace std;

int main(int argc, char *argv[])
{
Mounter mounterObj; // Declara um objeto da classe Mounter

string pathStr, imagemStr, pontoDeMontagemStr;

cout << "Digite o path para a imagem (Ex: /home/user/)" << endl;
cin >> pathStr;
cout << "Digite o nome da imagem (Ex: imagem.iso)" << endl;
cin >> imagemStr;
cout << "Digite o ponto de montagem da imagem (Ex: /mnt/iso)" << endl;
cin >> pontoDeMontagemStr;

mounterObj.setPath( pathStr );
mounterObj.setImagem( imagemStr );
mounterObj.setPontoDeMontagem( pontoDeMontagemStr );

mounterObj.mount();

  return EXIT_SUCCESS;
}


Definição da classe Mounter
Código: [Selecionar]
#ifndef MOUNTER_H
#define MOUNTER_H

#include <string>
#include <iostream>

using namespace std;

class Mounter{
public:
Mounter();

~Mounter();

void setPath(string pPathStr);
void setImagem(string pImagemStr);
void setPontoDeMontagem(string pPontoDeMontagemStr);
void mount();

protected:
string pathStr;
string imagemStr;
string pontoDeMontagemStr;
string opcoesStr;
};

#endif

Implementação da classe Mounter
Código: [Selecionar]
#include "mounter.h"

Mounter::Mounter()
{
pathStr = "/";
imagemStr = "imagem.iso";
pontoDeMontagemStr = "/mnt/iso";
opcoesStr = "-t iso9660 -o loop";
}


Mounter::~Mounter()
{
}


void Mounter::setPath( string pPathStr )
{
pathStr = pPathStr;
if(pathStr[pathStr.length()-1] != '/')
pathStr+="/";
}


void Mounter::setImagem( string pImagemStr )
{
imagemStr = pImagemStr;
}


void Mounter::setPontoDeMontagem( string pPontoDeMontagemStr )
{
pontoDeMontagemStr = pPontoDeMontagemStr;
}


void Mounter::mount()
{
string comando = "sudo mount " + opcoesStr + " " + pathStr + imagemStr + " " + pontoDeMontagemStr;
system(comando.c_str()); // A função c_str converte uma string para um array de char no estilo de C puro, que é o que a função "system" espera receber.
}


A primeira vista parece que em C++ ficou é mais complicado. 3 arquivos só pra fazer o que vc fez em poucas linhas no C puro. Mas é porque esse programa é bem simples. Programas maiores certamente são mais fáceis de entender em C++ do que em C.

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Problemas com system() en c++
« Resposta #19 Online: 04 de MAR?O de 2007, 01:10 »
MEU DEUS que isso cara tem que saber muito para fazer isso que voce fez, eu ainda estou começando a programar valeu mesmo pelo exemplo e muito obrigado pelo tempo dedicado a me explicar como seria em c++, vc so podia ter comentado o que as linha do codigo faz  ;D, porem sei que isso ficaria demorado demais para voce fazer ne, muito obrigadoooooo mesmo sanou minha duvida me assutou um pouco na realidade  ;D mas nada que com o tempo e com estudo eu não seja capaz de fazer é isso um abraço e t++

Darcamo

  • Visitante
Re: Problemas com system() en c++
« Resposta #20 Online: 04 de MAR?O de 2007, 13:30 »
Minha intenção não foi complicar. Na verdade fiquei curioso em usar a função system e resolvi fazer uma versão para C++.

Quanto a explicar as linhas, eu não usei nada demais. Apenas criei uma classe (chamada Mounter), criei um objeto dessa classe no arquivo main e usei algumas funções definidas nessa classe para setar o path, o nome da imagem, o ponto de montagem e finalmente montar a imagem iso. A parte
Código: [Selecionar]
mounterObj.setPath( pathStr );
mounterObj.setImagem( imagemStr );
mounterObj.setPontoDeMontagem( pontoDeMontagemStr );
mounterObj.mount();

Pega um bom livro de C++ que dê uma noção de orientação a objetos que vale a pena.

Offline solanoalves

  • Usuário Ubuntu
  • *
  • Mensagens: 398
  • Arch Linux
    • Ver perfil
Re: Problemas com system() en c++
« Resposta #21 Online: 04 de MAR?O de 2007, 13:40 »
realmente muito confuso C++, 3 arquivos só para captar dados e executar um system.

Bom aproveitando o momento queria perguntar uma coisa que me deixa realmente frustrado:

Alguns programadores criam 3 arquivos:


1. codigo fonte
2. mais um arquivo em formato .c
3. e o header

Vejo que no arquivo 2 ele declara por exemplo:  int numero(int a , int b);
E no arquivo 3 a mesma coisa só que agora com a função toda .....
E pra piorar no codigo fonte ele novamente repete int numero(int a, int b); que chama de prototipo.

agora pergunto: por que se deve encher tanta linguiça?
não é necessario só o header?

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Problemas com system() en c++
« Resposta #22 Online: 04 de MAR?O de 2007, 15:07 »
Minha intenção não foi complicar. Na verdade fiquei curioso em usar a função system e resolvi fazer uma versão para C++.

Quanto a explicar as linhas, eu não usei nada demais. Apenas criei uma classe (chamada Mounter), criei um objeto dessa classe no arquivo main e usei algumas funções definidas nessa classe para setar o path, o nome da imagem, o ponto de montagem e finalmente montar a imagem iso. A parte
Código: [Selecionar]
mounterObj.setPath( pathStr );
mounterObj.setImagem( imagemStr );
mounterObj.setPontoDeMontagem( pontoDeMontagemStr );
mounterObj.mount();

Pega um bom livro de C++ que dê uma noção de orientação a objetos que vale a pena.

Sei que sua intenção não foi complicar de forma alguma disse isso fiquei muito grato por ter tido pasciencia de fazer um exemplo para me mostrar como seria, enquanto aprender c++ tem muita gente me dissendo primeiro para mim aprender c e depois que ja estiver bem com o c ai sim partir para o c++, acho que vai ser isso que vou fazer ate porque se não complica muito meu aprendizado, volto a agradecer pelo exemplo XD,