2013-07-29 53 views
14

tôi cần phải xuất khẩu một số biến như vậy mà họ trông giống như sau trong dòng lệnhLàm thế nào để sử dụng setenv() để xuất một biến trong c + +?

export ROS_HOSTNAME=xxx 

Làm thế nào để sử dụng setenv() trong C++ để đạt được điều đó?

Cảm ơn.

+0

Vì lý do gì bạn đề cập đến thẻ [tag: command-line] trong ngữ cảnh câu hỏi của bạn? Bạn sẽ cần phải _'export'_ ở đâu? Xây dựng điều này xin vui lòng! –

+1

Trong bối cảnh nào, các biến môi trường này cần được hiển thị? Nếu chúng chỉ cần được hiển thị trong chương trình gọi 'setenv', bạn ổn. Nếu bạn cần chúng hiển thị * trong vỏ của bạn * sau khi bạn chạy chương trình, hãy nói như vậy; có những cách gián tiếp để làm điều đó, nhưng tôi sẽ không trả lời câu hỏi đó trừ khi bạn hỏi nó. –

+0

"Xuất" là một tính năng * vỏ *. 'setenv()' luôn luôn "xuất" 'environ' /' envp' trừ khi con được chia nhỏ được chuyển thành 'envp' được tùy chỉnh, tức là' execle() '. – Barry

Trả lời

21

Từ mục setenv() dẫn sử dụng:

SYNOPSIS

#include <stdlib.h> 
int setenv(const char *envname, const char *envval, int overwrite); 

MÔ TẢ
Các setenv() chức năng có trách nhiệm cập nhật hoặc thêm một biến trong môi trường của quá trình gọi. Đối số envname trỏ đến một chuỗi chứa tên của biến môi trường là được thêm vào hoặc thay đổi. Biến môi trường phải được đặt thành giá trị cho các điểm cộng. Hàm sẽ thất bại nếu envname trỏ tới một chuỗi chứa ký tự '='. Nếu biến môi trường có tên là envname đã tồn tại và giá trị ghi đè không khác, hàm sẽ trả về thành công và môi trường sẽ được cập nhật. Nếu môi trường biến được đặt tên bởi envname đã tồn tại và giá trị ghi đè bằng 0, hàm sẽ trả về thành công và môi trường sẽ không thay đổi.

Nếu ứng dụng sửa đổi môi trường hoặc con trỏ mà nó trỏ, hành vi của setenv() là không xác định. Hàm setenv() sẽ cập nhật danh sách các con trỏ theo đó môi trường điểm.

Các chuỗi được mô tả bởi envname và envval được sao chép bởi hàm này.

Hàm setenv() không cần phải reentrant. Một chức năng không bắt buộc phải reentrant là không cần thiết để được an toàn thread.

Giá trị trả lại
Sau khi hoàn tất thành công, không được trả về số không. Nếu không, -1 sẽ được trả về, errno được đặt để chỉ ra lỗi và môi trường sẽ không thay đổi.

Vì vậy, bạn nên gọi

setenv("ROS_HOSTNAME","xxx",1); // does overwrite 

hoặc

setenv("ROS_HOSTNAME","xxx",0); // does not overwrite 

cho trường hợp của bạn. Phụ thuộc, nếu bạn muốn ghi đè lên một định nghĩa có thể có.

LƯU Ý:

Bạn không thể sử dụng setenv() để xuất khẩu biến từ quá trình của bạn để quá trình gọi điện thoại (vỏ)! Quy trình con được tạo bằng ngã ba, sẽ kế thừa các định nghĩa môi trường quy trình hiện tại, do đó, các thay đổi và bổ sung của bạn là tốt.

0

Ở đây, chữ ký cho chức năng setenv

#include <stdlib.h> 

int setenv (const char * envname, const char * envval, int ghi đè);

Link: http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html

Trong trường hợp của bạn, bạn gọi nó là như thế này:

setenv("ROS_HOSTNAME", "xxx", true); 

boolean luận cuối cùng chỉ ra nếu bạn muốn ghi đè lên giá trị của các biến môi trường nếu nó đã tồn tại.

0

Làm như này:

setenv("ROS_HOSTNAME", "xxx", true); 

Lưu ý đó là tóm tắt cũng như:

#include <stdlib.h> 

int setenv(const char *envname, const char *envval, int overwrite); 

Xem this link để biết thêm chi tiết về setenv().

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