Problemas com system() en c++

Iniciado por Diego_Rocha, 02 de Março de 2007, 16:40

tópico anterior - próximo tópico

Diego_Rocha

E ai pessoal estou com o seguinte problema, sou novato em c++, e fiz um programinha bem bestinha :D so por questão de praticar mesmo, so que me encontro com o seguinte problema vou postar o codigo para voces verem ok


#include <iostream>
#include <string.h>
using namespace std;
struct miso
{
char local[100];
char iso[100];
char comando[250];
int TAM;
};
int monta(struct miso mont)
{
char destino[10]="/mnt/miso";
mont.TAM=100;
system("clear");
cout <<"\nDigite o caminho da imagem(ex: /home/user )";
cout <<"\n--> ";
cin.getline(mont.local,mont.TAM);
cout <<"\n\nDigite o nome da iso(ex: nome_iso.iso)";
cout <<"\n--> ";
cin.getline(mont.iso,mont.TAM);
cout <<"\n\nAguarde montando iso\n";
strcat(mont.local, "/");
strcat(mont.local,mont.iso);
strcat(mont.comando,"sudo mount -t iso9660 -o loop ");
strcat(mont.comando,mont.local);
strcat(mont.comando," ");
strcat(mont.comando,destino);
system(mont.comando);
}
int desmonta(struct miso desmont)
{
system("sudo umount /mnt/miso");
monta(desmont);
}
int sair()
{
return 0;
}
int monta();
int desmonta();
int sair();
int main()
{
miso o_miso;
cout <<"\nCriando diretorio miso!";
if (system("sudo mkdir /mnt/miso") != -1)
{
cout <<"\nDiretorio criado com sucesso!";
desmonta(o_miso);
}
else
{
cout <<"\nErro ao criar diretorio!";
sair();
}
}


na hora de executar o system(mont.comando); da erro diz que o comando sudo não existe ja tirei o sudo deixei so mount mas diz tbm que o mount nao existe como posso resolver isso obrigado

solanoalves

tente adicionar a biblioteca <stdlib.h>

nao sei se ajuda mas ta ae

Diego_Rocha

Citação de: solanoalves online 02 de Março de 2007, 16:59
tente adicionar a biblioteca <stdlib.h>

nao sei se ajuda mas ta ae

Não funcionou cara, continua dando esse erro

Citar
sh: mount: command not found

Valeu cara,

solanoalves

tente dar um

sudo apt-get install mount

Diego_Rocha

Meu mount funciona normal, isso que to achando estranho acho que na concatenação das strings esta havendo algum equivoco, eu imprimo a mont.comando na tela e esta perfeito so que na hora do system da erro não sei o que é estou pesquisando agora um outro metedo de concatenar pra ver se resolve isso valeu t++

solanoalves

tente sprintf(variavel,"%s %s",caminho,destino);

eu programo em C mas acho q deve ter essa função ai

Diego_Rocha

O modo que faço ate funciona na hora de concatenar, quando imprimo a variavel mont.comando na tela me mostra perfeito, so que na hora que uso o system ele não vai, t++

solanoalves

tenta usar o comando sprintf e retorna ai como ficou....

você poderia usar ponteiros para char ao invés de vetores. pode estar ai o problema também.

eu fiz um programa usando o system com variaveis ponteiros para char e usando a função sprintf para juntar as strings em uma unica variavel

solanoalves

Olhe como ficou :




    char *temp,*temp2;
    char comando[100];
    temp = (char *)malloc(sizeof(char )*100);
    temp2 = (char *)malloc(sizeof(char )*45);
    temp = "sudo apt-get install";
    temp2 = (char *)argv[2];
    sprintf(comando, "%s %s",temp,temp2);
    system(comando);

Diego_Rocha

Vou testar isso agora, mas continuo querendo saber porque quando imprimo o mont.comando aparece perfeito o comando so que quando coloca ele no system() da erro o0; sera que não é possivel fazer isso utilizando so c++ sem ter que implementar com c?? muito obrigado solano vou testar isso agora ate ++

Khoala

#10
Da uma olhada aqui isso pode te ajudar

http://www.cplusplus.com/reference/string/string/operator+=.html



Desculpe falha de memória esqueci de colocar o link

Diego_Rocha

Citação de: Khoala online 02 de Março de 2007, 23:00
Da uma olhada aqui isso pode te ajudar

Acho que voce esqueceu de postar o link  ;D ;D

Khoala


Diego_Rocha

Citação de: Khoala online 03 de Março de 2007, 00:25
Já viu se funcionou??

Concatena legal igual o strcat so que fica mais legivel +=; porem continua dando erro no system() não sei o que pode ser amanha vou testar ele em c para ver se vai obrigado t++

Diego_Rocha

Ai pessoal achei a solução, mudei para c o codigo e funcionou normal perfeito, vou postar o codigo em c ainda esta bem mau feito pois fiz so para testar mesmo, esse programa não tem utilidade nenhuma foi feito so para praticar mesmo, ai vai o codigo e obrigado a todos que tentaram me ajudar mais acho que vou mudar o rumo dos meus estudos e me dedicar ao c inves c++,  ;D

*ai solano ficou exatamente como vc disse valeu;


#include <stdio.h>
#include <stdlib.h>
int main()
{
char local[100];
char iso[100];
char comando[100];
char destino[10]="/mnt/miso";
char *temp;
char cmd[200];
system("clear");
printf("\nDigite o caminho da imagem(ex: /home/user )");
scanf("%s",&local);
printf("\nDigite o nome da iso(ex: arquivo.iso)");
scanf("%s",&iso);
temp =(char *)malloc(sizeof(char )*200);
temp ="mount -t iso9660 -o loop ";
sprintf(cmd, "%s %s/%s %s",temp, local, iso,destino);
system(cmd);
return 0;
}