C - putenv [RESOLVIDO]

1. C - putenv [RESOLVIDO]

NICHOLAS
p0w3llx

(usa Debian)

Enviado em 26/09/2015 - 18:14h

Pessoal, qual a finalidade de (memcpy e putenv) em C?


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/09/2015 - 22:58h

Sobre memcpy(): Copia valores de uma string para outra.

* http://angelitomg.com/blog/utilizando-a-funcao-memcpy-em-c/
* http://www.tutorialspoint.com/c_standard_library/c_function_memcpy.htm
* http://www.cprogressivo.net/2013/03/Funcao-memcpy-o-que-e-como-criar.html


Sobre putenv():

Existe uma outra função chamada getenv() que tem uma utilidade que tem a ver com putenv(). Os exemplos eu resolvi tirar da internet.

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

int main ()
{
char *ptr_path;
ptr_path = getenv ("PATH");

if (ptr_path!=NULL)
printf ("The set path is: %s\n",ptr_path);

return 0;
}


Se você compilar e executar o programa acima, vai ver que ele exibe o valor da variável de ambiente chamada PATH. Se você executar echo $PATH no prompt de shell vai ver a exibição do mesmo valor. Se você trocar getenv(PATH) por getenv(HOME) vai ver o valor exibido por echo $HOME no prompt.

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

int main( void )
{
char *path;
path = getenv( "INCLUDE" );

if( path != NULL ) {
printf( "INCLUDE=%s\n", path );
}

if( putenv( "INCLUDE=/src/include" ) != 0 ) {
printf( "putenv() failed setting INCLUDE\n" );
return EXIT_FAILURE;
}

path = getenv( "INCLUDE" );

if( path != NULL ) {
printf( "INCLUDE=%s\n", path );
}

unsetenv( "INCLUDE" );

return EXIT_SUCCESS;
}


Agora executando o programa acima, ele exibe o valor da variável INCLUDE. Depois ele troca por outro.
Se a variável include não existir, ele exibe coisa alguma. Depois ele dá reset na variável.

Experimente antes de executar este programa criar a variável INCLUDE, por exemplo INCLUDE=xxxx.
Se você executar o programa, vai ver que ele exibe coisa alguma.
Agora, se você executar no prompt echo $INCLUDE vai ver o valor ainda lá. Mas o que ocorreu?

Para a variável INCLUDE ser visível pelo programa é necessária a declaração com export deste modo: export INCLUDE=xxxx.
Isto garante que a variável seja visível por qualquer coisa abaixo da instância de shell atual.

--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

3. Re: C - putenv

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/09/2015 - 16:22h

Sobre memcpy(), ela serve para copiar blocos de memória, com quaisquer tipos de dados e valores, desde que se saiba o tamanho a ser copiado.

Digo isso porque ao indicar que serve para copiar strings, pode-se ter a impressão de que ela é redundante com strcpy() ou strncpy(), que interrompem a cópia ao encontrar um byte nulo (usado pelo C para marcar o fim de um string de texto). Não é o caso de mempy(). Isso deveria ficar claro, inclusive, pelos tipos dos argumentos indicadores de origem e destino, que são void * em memcpy(), e char * em strcpy() e strncpy().

Com relação a putenv()/setenv() -- eu prefiro e recomendo setenv() --, trata-se de uma função que modifica variáveis do ambiente de execução. Essas variáveis afetam o processo corrente e possivelmente processos que sejam seus descentes, mas não altera o ambiente de execução do processo pai ou de outros processos não-relacionados.

Como mostrou o listeiro_037, algumas variáveis de ambiente, tais como PATH, USER, HOME, LANG, LC_ALL, EDITOR ou TMPDIR, entre outras, têm significado padronizado para muitas ferramentas do sistema. Por conseguinte, elas afetam também funções da biblioteca do C que dependem de algumas dessas ferramentas externas, tais como system() e popen(), que dependem do shell para executar comandos externos. Também as funções execl(), execlp(), execv() e execlp(), mesmo sem usar o shell externo, preservam o ambiente do processo atual antes de invocar o comando novo, e, no caso das que têm sufixo p, ainda utilizam o valor de PATH para encontrar o comando a ser executado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts