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
#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
#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
#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.