Ir para conteúdo
Fórum Script Brasil

Gutovookrj

Membros
  • Total de itens

    11
  • Registro em

  • Última visita

Tudo que Gutovookrj postou

  1. Olá, pessoal. A idéia é a seguinte... O programa em Python pegará uma entrada de usuário e senha de outro programa, e deve executar o comando de linha "htpasswd", que adiciona um usuário e senha para poder acessar uma determinada página configurada em servidor Apache. Tava tentando usar popen, mas esbarrei no seguinte problema: o comando "htpasswd", depois de executado, pede senha e confirmação de senha. A senha não deve ser enviada como argumento, e sim logo após do comando ter sido executado, assim que ele pedir. cmd= ['htpasswd','-s','/home/user1/private/passwords',username] p1 = popen(cmd,stdin=PIPE,stdout=PIPE).communicate()[0] Acredito que esse comando que eu fiz chame a função "htpasswd -s /home/user1/private/passwords <username>" Logo após esse comando, pelo menos quando digitado pelo terminal, o sistema pede a senha. Como eu faço pra passar essa senha como se fosse entrada do teclado através do programa em Python? Obrigado desde já.
  2. Já achei minha resposta. Na verdade, achei 3 possíveis respostas, que dão o mesmo resultado pra mim. dir = getcwd(dir, 0); dir = get_current_dir_name(); dir = getwd(dir); onde dir é um char* apontando inicialmente pra NULL. As três funções dão o mesmo resultado, que é o caminho absoluto até o diretório onde se encontra o seu executável. Se o executável está em "/home/user/exec", as funções retornam "/home/user/". Depois pra eu pegar a pasta que eu queria foi só fazer um laço de strtok usando "/" como separador.
  3. Olá, pessoal do Script! To com uma dúvida. Tipo, tenho um código que será compilado, e seu executável (cgi, na verdade) irá pra 2 diretórios diferentes, A e B. Queria saber como fazer pra retornar o caminho do executável, tipo: /home/*user*/public_html/A/cgi-bin/exec.cgi ou /home/*user*/public_html/B/cgi-bin/exec.cgi Serve também caminho relativo, desde pegue o A e o B, pois o nome do diretório será impresso no nome de um arquivo que será gerado pelo programa. O programa será executado em Linux. Desde já agradeço ;) EDIT: Resumindo, queria saber se existe alguma função em C que retorne o caminho, absoluto ou relativo, do próprio arquivo.
  4. Você vai precisar fazer alocação dinâmica, não tem outra maneira. Defina a matriz como: double **matriz; Depois de capturar o valor de n e antes de utilizar a matriz, faça: em C: // não sei se o type casting é necessário, mas aconselho a usar sempre matriz = (double **) malloc(n*sizeof(double *)); //aloca um ponteiro para ponteiro de double for (i = 0; i<n; i++) matriz[i] = (double *) malloc(n*sizeof(double)); // aloca um ponteiro para double em C++ matriz = new double* [n]; for (int i=0; i<n; i++) matriz[i] = new double [n]; E no final do programa, quando você não precisar mais usar a matriz, faça: Em C: for (i = 0; i<n; i++) free(matriz[i]); free(matriz); Em C++: for (int i=0; i<n; i++) delete matriz[i]; delete matriz; Pra passar como argumento em função teste, você deve definir na função, que o argumento que você vai receber é do tipo double** & Isso diz que você vai poder modificar o conteúdo da matriz e devolvê-lo pra fora da função. defina assim: void teste (double ** &matriz) { } Mas quando for fazer a chamada dela dentro da main, coloque a matriz sem & teste(matriz);
  5. Nossa, era um detalhe tão básico hahaha Acho que não li o suficiente sobre o fstream, vou procurar saber mais sobre as suas funções. Muito obrigado =D
  6. Olá. Estou com problema no meu código que não consigo identificar. Ele funciona perfeitamente no Linux, porém se executado no Windows, ele age de forma peculiar: Se eu digo o nome do arquivo correto de primeira, o programa age normalmente. Porém, se eu digo o nome errado, e na segunda tentativa disser o certo, não adianta, ele fica infinitamente no loop, dizendo que o nome está incorreto. No Linux não existe isso, eu posso errar na primeira, na segunda, etc, não importa. Se eu disser uma vez o nome correto, o programa segue adiante. Colarei o trecho pra análise: #include <fstream> ... ifstream arquivo; char nomeArquivo[50]; ... do { cout << "Nome do arquivo: "; cin >> nomeArquivo; // cout << nomeArquivo << endl; arquivo.open(nomeArquivo); if(!arquivo) cout << "Arquivo inexistente. Digite o nome do arquivo novamente." << endl; } while (!arquivo); ... Coloquei um cout pra verificar se a entrada está correta, e está. EDIT: Ah, esqueci de dizer... No Linux usei o g++ como compilador. No Windows usei o compilador do Dev C++ (que é uma imitação do g++).
  7. Já solucionei o problema, mas de qualquer forma, obrigado :) Acho que o problema tava no compilador (devc++ rodando pelo windows), ou eu dei bobeira em alguma parte do algoritmo que não lembro, mas não importa mais :P eu parei de armazenar a variável em string. Dessa vez, coloquei em float mesmo e funcionou. antes, estava assim: fscanf(arquivo,"%10s%10s%lg%30s%*[^\n]",na,nb,&netlist[ne].valor,netlist[ne].var1); E em algum outro lugar do código eu fazia: IC1 = atof(&netlist[ne].var1[3]); agora, está assim: fscanf(arquivo,"%10s%10s%lg IC=%lg%*[^\n]",na,nb,&netlist[ne].valor,&netlist[ne].ic); Tá funcionando pra qualquer arquivo, e tá bem melhor que a leitura de string, pois se não tiver nada ali no arquivo, ele já atribui 0 à ic. Da forma antiga, obrigava o usuário a definir IC no arquivo, mesmo que fosse pra colocar IC=0, senão a string pegava o que estivesse na linha seguinte, e a leitura do arquivo ficava toda errada. De qualquer forma, o programa já tá pronto e funcionando perfeitamente =] É um programa que analisa circuitos elétricos, pegando uma netlist (arquivo com descrição do circuito, com elementos e os nós onde eles estão ligados), e calcula tensões e correntes no circuito inteiro, usando polinômios vindos da Transformada de Laplace (por isso a dúvida do outro tópico). Esse IC seriam condições iniciais em capacitores ou indutores e tal.
  8. Olá novamente. Estou com um problema no atof... Eu tenho uma variável do tipo string que tem o seguinte valor: "IC=-2.87604039957841E-1" Isso é a mesma coisa que -2.876 x 10^(-1), que seria -0.2876, certo? O problema é que quando eu faço o atof(&ic[3]), ele me retorna um float de valor -2.876, 10 vezes maior do que o correto, porque parece que ele não enxerga o E-1 como 10 elevado a -1. criei ic como char ic[30]; Alguém sabe a solução disso?
  9. Nevermind, já consegui resolver. Achei um jeito mais prático de calcular o determinante, agora se consome 1MB de memória é muito, mesmo em matrizes 20x20.
  10. tenho uma struct: typedef struct { double s[MAX_GRAU]; unsigned short grau; } polinomio; E a minha função que dá problema de memória: unsigned short calcDet(polinomio **matriz, unsigned short ordem, double det[MAX_GRAU]){ double d[MAX_GRAU]; unsigned short i,j,k,a,b,c, grau, graux; for (i=0; i<MAX_GRAU; i++) det[i]=0; grau=0; if (ordem==1) { for (k=0; k<=matriz[1][1].grau; k++) det[k]=matriz[1][1].s[k]; grau=matriz[1][1].grau; } else if (ordem==2) { for(i=0;(i<=matriz[1][1].grau || i<=matriz[1][2].grau); i++) for (j=0;(j<=matriz[2][1].grau || j<=matriz[2][2].grau); j++) { det[i+j]+= ((matriz[1][1].s[i])*(matriz[2][2].s[j]) - (matriz[1][2].s[i])*(matriz[2][1].s[j])); } if ((matriz[1][1].grau + matriz[2][2].grau)>(matriz[1][2].grau + matriz[2][1].grau)) grau = matriz[1][1].grau + matriz[2][2].grau; else (grau = matriz[1][2].grau + matriz[2][1].grau); while (grau!=0 && det[grau]==0) grau--; } else { for (a=1; a<=ordem; a++) //coluna onde se encontra o cofator { auxiliar = (polinomio **)malloc((ordem+1)*sizeof(polinomio *)); for (i=0; i<=ordem; i++) auxiliar[i] = (polinomio *)malloc((ordem+1)*sizeof(polinomio)); for(i=2,c=1; i<=ordem; i++) { //pula a primeira linha da matriz, pois vai ser a default para uso dos cofatores for (j=1,b=1; j<=ordem;j++) { if (a!=j || j!=ordem) { if(a==j) j++; auxiliar[c][b]=matriz[i][j]; } b++; } c++; } graux = calcDet(auxiliar,ordem-1,d); for(i=0;i<=matriz[1][a].grau; i++) for (j=0;j<=graux; j++) { det[i+j]+=(a%2 + a%2 - 1)*(matriz[1][a].s[i])*(d[j]); //considerando que o cofator sempre está na linha 1 } if (grau<((i-1)+(j-1))) grau = (i-1)+(j-1); for (i=0; i<=ordem; i++) free(auxiliar[i]); free(auxiliar); } } return (grau); } -- O algoritmo funciona pra 2x2, 3x3, 4x4, 5x5... Pra 6x6 o programa trava... Só funciona se eu aumentar a dimensão do malloc do auxiliar E conforme vou aumentando, o programa vai tolerando matrizes maiores (não entendo por quê). Só que tem um limite, acho que com matrizes 12x12, quando passo a aumentar a dimensão da auxiliar, o programa trava mais rápido. Teve uma vez que o programa chegou a usar 790MB de RAM. Tenho um tratamento para ele fazer menos cálculos, reduzindo o tempo de processamento, mas não pus aqui pois não era minha dúvida. Alguém pode me ajudar? Agradeço antecipadamente :)
  11. Gutovookrj

    Malloc e struct

    faça o seguinte: struct { int a; char *s; } node; e para alocar, tente fazer: x->s = (char *)malloc(sMAX*sizeof(char)); x = (node *)malloc(nodeMAX*sizeof(node)); e vê se funciona.
×
×
  • Criar Novo...