⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 erl_bif_os.c

📁 OTP是开放电信平台的简称
💻 C
字号:
/* ``The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved via the world wide web at http://www.erlang.org/. *  * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. *  * The Initial Developer of the Original Code is Ericsson Utvecklings AB. * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings * AB. All Rights Reserved.'' *  *     $Id$ *//* * BIFs belonging to the 'os' module. */#ifdef HAVE_CONFIG_H#  include "config.h"#endif#include "sys.h"#include "erl_vm.h"#include "global.h"#include "erl_process.h"#include "error.h"#include "erl_driver.h"#include "bif.h"#include "big.h"#include "dist.h"#include "erl_version.h"/* * Return the pid for the Erlang process in the host OS. */Etermos_getpid_0(Process* p){     char pid_string[21]; /* enough for a 64 bit number */     int n;     Eterm* hp;     sys_get_pid(pid_string); /* In sys.c */     n = sys_strlen(pid_string);     hp = HAlloc(p, n*2);     BIF_RET(buf_to_intlist(&hp, pid_string, n, NIL));}Etermos_getenv_0(Process* p){    GETENV_STATE state;    char *cp;    Eterm* hp;    Eterm ret;    Eterm str;    int len;    init_getenv_state(&state);    ret = NIL;    while ((cp = getenv_string(&state)) != NULL) {	len = strlen(cp);	hp = HAlloc(p, len*2+2);	str = buf_to_intlist(&hp, cp, len, NIL);	ret = CONS(hp, str, ret);    }    fini_getenv_state(&state);    return ret;}Etermos_getenv_1(Process* p, Eterm key){    Eterm str;    int len;    char *key_str;    char* val;    len = is_string(key);    if (!len) {	BIF_ERROR(p, BADARG);    }    key_str = (char *) erts_alloc(ERTS_ALC_T_TMP, len+1);    if (intlist_to_buf(key, key_str, len) != len)	erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);    key_str[len] = '\0';    val = getenv(key_str);    if (val == NULL) {	str = am_false;    } else {	Eterm* hp;	len = strlen(val);	hp = HAlloc(p, len*2);	str = buf_to_intlist(&hp, val, len, NIL);    }    erts_free(ERTS_ALC_T_TMP, (void *) key_str);    BIF_RET(str);}Etermos_putenv_2(Process* p, Eterm key, Eterm value){    char *buf = NULL;    int i, key_len, value_len;    key_len = is_string(key);    if (!key_len) {    error:	if (buf)	    erts_free(ERTS_ALC_T_TMP, (void *) buf);	BIF_ERROR(p, BADARG);    }    value_len = is_string(value);    if (!value_len)	goto error;    buf = erts_alloc(ERTS_ALC_T_TMP, key_len + 1 + value_len + 1);    i = intlist_to_buf(key, buf, key_len);    if (i != key_len)	erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);	    buf[i++] = '=';    i += intlist_to_buf(value, &buf[i], value_len);    if (i != key_len + 1 + value_len)	erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);	    buf[i] = '\0';    if (sys_putenv(buf)) {	goto error;    }    erts_free(ERTS_ALC_T_TMP, (void *) buf);    BIF_RET(am_true);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -