2009-05-22 39 views
33

Làm cách nào để đặt biến môi trường trong C++?Đặt biến môi trường cục bộ trong C++

  • Họ không cần phải kiên trì thực hiện chương trình qua
  • Họ chỉ cần được nhìn thấy trong quá trình hiện
  • Preference cho nền tảng độc lập nhưng đối với vấn đề của tôi chỉ cần làm việc trên Win32/64

Cảm ơn

Trả lời

45
 
NAME 

     putenv - change or add an environment variable 

SYNOPSIS 

     #include &ltstdlib.h> 

     int putenv(char *string); 

DESCRIPTION 
     The putenv() function adds or changes the value of environment 
     variables. The argument string is of the form name=value. If name does 
     not already exist in the environment, then string is added to the 
     environment. If name does exist, then the value of name in the 
     environment is changed to value. The string pointed to by string becomes 
     part of the environment, so altering the string changes the environment. 

On Win32 nó được gọi là _putenv tôi tin.

Xem SetEnvironmentVariable cũng nếu bạn là người hâm mộ các tên chức năng dài và xấu.

+4

Lưu ý cho người hỏi - putenv cũng được hỗ trợ trong Win32. –

+19

Chúng ta có thể sử dụng tên tiêu đề C++ thích hợp không? là thích hợp (vâng, tôi biết ... đó là một hangup của tôi). –

+4

Nó là C như một Chúa thần dự định. – alamar

3

Tôi không phải là biến môi trường tích cực là những gì bạn cần, vì chúng sẽ không được sử dụng bên ngoài chương trình này. Không cần phải tham gia hệ điều hành.

Bạn có thể tốt hơn khi có một lớp đơn hoặc vùng tên chứa tất cả các giá trị này và khởi tạo chúng khi bạn khởi động chương trình.

+0

Chúng sẽ chỉ hiển thị với các tiến trình con, và putenv() thường không cần phải nói chuyện với hệ điều hành. – RBerteig

-2
#include<stdio.h> 
#include<unistd.h> 
#include<stdlib.h> 
#include<string.h> 
    main(int argc,char *argv[]) 
    { 

    char *var,*value; 
     if(argc==1||argc>3) 
     { 
     fprintf(stderr,"usage:environ variables \n"); 
     exit(0); 
     } 
    var=argv[1]; 
    value=getenv(var); 
    //--------------------------------------- 
     if(value) 
     { 
     printf("variable %s has value %s \n",var,value); 
     } 
     else 
     printf("variable %s has no value \n",var); 
     //---------------------------------------- 
     if(argc==3) 
     { 
     char *string; 
     value=argv[2]; 
     string=malloc(strlen(var)+strlen(value)+2); 
      if(!string) 
      { 
      fprintf(stderr,"out of memory \n"); 
      exit(1); 
      } 
      strcpy(string,var); 
      strcat(string,"="); 
      strcat(string,value); 
      printf("calling putenv with: %s \n",string); 
      if(putenv(string)!=0) 
      { 
      fprintf(stderr,"putenv failed\n"); 
      free(string); 
      exit(1); 
      } 
         value=getenv(var); 
      if(value) 
       printf("New value of %s is %s \n",var,value); 
      else 
      printf("New value of %s is null??\n",var); 
     }  
     exit(0); 

    }//----main 





/* commands to execure on linux compile:- $gcc -o myfile myfile.c 
         run:- $./myfile xyz 
              $./myfile abc 
              $./myfile pqr 
*/ 
+8

Mã này trả lời câu hỏi như thế nào? Tại sao bạn chia sẻ điều này với chúng tôi? –

+0

Tôi mong đợi câu trả lời bao gồm (1) một tệp bao gồm và (2) một dòng mã. Và có lẽ một thư viện tôi phải liên kết với. – notlesh

+0

notlesh, tại sao? Ngoài ra các hướng dẫn biên dịch là ngay tại đó. Tại sao thêm nhiều tệp hơn? Tôi không hiểu tại sao điều này lại bị bỏ phiếu. – Owl

Các vấn đề liên quan