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

📄 posix.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*   +----------------------------------------------------------------------+   | PHP Version 4                                                        |   +----------------------------------------------------------------------+   | Copyright (c) 1997-2007 The PHP Group                                |   +----------------------------------------------------------------------+   | This source file is subject to version 3.01 of the PHP license,      |   | that is bundled with this package in the file LICENSE, and is        |   | available through the world-wide-web at the following url:           |   | http://www.php.net/license/3_01.txt                                  |   | If you did not receive a copy of the PHP license and are unable to   |   | obtain it through the world-wide-web, please send a note to          |   | license@php.net so we can mail you a copy immediately.               |   +----------------------------------------------------------------------+   | Author: Kristian Koehntopp <kris@koehntopp.de>                       |   +----------------------------------------------------------------------+ *//* $Id: posix.c,v 1.51.2.4.2.3 2007/01/01 09:46:46 sebastian Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "php.h"#include "ext/standard/info.h"#include "ext/standard/php_string.h"#include "php_posix.h"#if HAVE_POSIX#ifdef HAVE_SYS_TIME_H#include <sys/time.h>#endif#include <unistd.h>#include <sys/resource.h>#include <sys/utsname.h>#include <sys/types.h>#include <sys/stat.h>#include <signal.h>#include <sys/times.h>#include <errno.h>#include <grp.h>#include <pwd.h>ZEND_DECLARE_MODULE_GLOBALS(posix)/* {{{ posix_functions[] */function_entry posix_functions[] = {    /* POSIX.1, 3.3 */	PHP_FE(posix_kill,		NULL)	/* POSIX.1, 4.1 */	PHP_FE(posix_getpid,	NULL)	PHP_FE(posix_getppid,	NULL)	/* POSIX.1,  4.2 */	PHP_FE(posix_getuid,	NULL)	PHP_FE(posix_setuid,	NULL)	PHP_FE(posix_geteuid,	NULL)#ifdef HAVE_SETEUID	PHP_FE(posix_seteuid,	NULL)#endif	PHP_FE(posix_getgid,	NULL)	PHP_FE(posix_setgid,	NULL)	PHP_FE(posix_getegid,	NULL)#ifdef HAVE_SETEGID	PHP_FE(posix_setegid,	NULL)#endif#ifdef HAVE_GETGROUPS	PHP_FE(posix_getgroups,	NULL)#endif#ifdef HAVE_GETLOGIN	PHP_FE(posix_getlogin,	NULL)#endif	/* POSIX.1, 4.3 */	PHP_FE(posix_getpgrp,	NULL)#ifdef HAVE_SETSID	PHP_FE(posix_setsid,	NULL)#endif	PHP_FE(posix_setpgid,	NULL)	/* Non-Posix functions which are common */#ifdef HAVE_GETPGID	PHP_FE(posix_getpgid,	NULL)#endif /* HAVE_GETPGID */#ifdef HAVE_GETSID	PHP_FE(posix_getsid,	NULL)#endif /* HAVE_GETSID */	/* POSIX.1, 4.4 */	PHP_FE(posix_uname,		NULL)	/* POSIX.1, 4.5 */	PHP_FE(posix_times,		NULL)	/* POSIX.1, 4.7 */#ifdef HAVE_CTERMID	PHP_FE(posix_ctermid,	NULL)#endif	PHP_FE(posix_ttyname,	NULL)	PHP_FE(posix_isatty,	NULL)    /* POSIX.1, 5.2 */	PHP_FE(posix_getcwd,	NULL)	/* POSIX.1, 5.4 */#ifdef HAVE_MKFIFO	PHP_FE(posix_mkfifo,	NULL)#endif	/* POSIX.1, 9.2 */	PHP_FE(posix_getgrnam,	NULL)	PHP_FE(posix_getgrgid,	NULL)	PHP_FE(posix_getpwnam,	NULL)	PHP_FE(posix_getpwuid,	NULL)#ifdef HAVE_GETRLIMIT	PHP_FE(posix_getrlimit,	NULL)#endif	PHP_FE(posix_get_last_error,					NULL)	PHP_FALIAS(posix_errno, posix_get_last_error,	NULL)	PHP_FE(posix_strerror,							NULL)	{NULL, NULL, NULL}};/* }}} *//* {{{ PHP_MINFO_FUNCTION */static PHP_MINFO_FUNCTION(posix){	php_info_print_table_start();	php_info_print_table_row(2, "Revision", "$Revision: 1.51.2.4.2.3 $");	php_info_print_table_end();}/* }}} */static void php_posix_init_globals(zend_posix_globals *posix_globals TSRMLS_DC){	posix_globals->last_error = 0;}/* {{{ PHP_MINIT_FUNCTION(posix) */static PHP_MINIT_FUNCTION(posix){	ZEND_INIT_MODULE_GLOBALS(posix, php_posix_init_globals, NULL);	return SUCCESS;}/* }}} */static PHP_MINFO_FUNCTION(posix);/* {{{ posix_module_entry */zend_module_entry posix_module_entry = {	STANDARD_MODULE_HEADER,	"posix", 	posix_functions, 	PHP_MINIT(posix),	NULL,	NULL,	NULL, 	PHP_MINFO(posix),    NO_VERSION_YET,	STANDARD_MODULE_PROPERTIES};/* }}} */#ifdef COMPILE_DL_POSIXZEND_GET_MODULE(posix)#endif/* {{{ proto bool posix_kill(int pid, int sig)   Send a signal to a process (POSIX.1, 3.3.2) */PHP_FUNCTION(posix_kill){	long pid, sig;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &pid, &sig) == FAILURE) {		RETURN_FALSE;	}  	if (kill(pid, sig) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;  	}  		RETURN_TRUE;}/* }}} *//* {{{ proto int posix_getpid(void)   Get the current process id (POSIX.1, 4.1.1) */PHP_FUNCTION(posix_getpid){	pid_t  pid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}		pid = getpid();	RETURN_LONG(pid);}/* }}} *//* {{{ proto int posix_getppid(void)   Get the parent process id (POSIX.1, 4.1.1) */PHP_FUNCTION(posix_getppid){	pid_t  ppid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	ppid = getppid();	RETURN_LONG(ppid);}/* }}} *//* {{{ proto int posix_getuid(void)   Get the current user id (POSIX.1, 4.2.1) */PHP_FUNCTION(posix_getuid){	uid_t  uid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	uid = getuid();	RETURN_LONG(uid);}/* }}} *//* {{{ proto int posix_getgid(void)   Get the current group id (POSIX.1, 4.2.1) */PHP_FUNCTION(posix_getgid){	gid_t  gid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	gid = getgid();	RETURN_LONG(gid);}/* }}} *//* {{{ proto int posix_geteuid(void)   Get the current effective user id (POSIX.1, 4.2.1) */PHP_FUNCTION(posix_geteuid){	uid_t  uid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	uid = geteuid();	RETURN_LONG(uid);}/* }}} *//* {{{ proto int posix_getegid(void)   Get the current effective group id (POSIX.1, 4.2.1) */PHP_FUNCTION(posix_getegid){	gid_t  gid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}		gid = getegid();	RETURN_LONG(gid); }/* }}} *//* {{{ proto bool posix_setuid(long uid)   Set user id (POSIX.1, 4.2.2) */PHP_FUNCTION(posix_setuid){	long uid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &uid) == FAILURE) {		RETURN_FALSE;	}		if (setuid(uid) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}		RETURN_TRUE;}/* }}} *//* {{{ proto bool posix_setgid(int uid)   Set group id (POSIX.1, 4.2.2) */PHP_FUNCTION(posix_setgid){	long gid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gid) == FAILURE) {		RETURN_FALSE;	}		if (setgid(gid) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}		RETURN_TRUE;}/* }}} *//* {{{ proto bool posix_seteuid(long uid)   Set effective user id */#ifdef HAVE_SETEUIDPHP_FUNCTION(posix_seteuid){	long euid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &euid) == FAILURE) {		RETURN_FALSE;	}		if (seteuid(euid) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}		RETURN_TRUE;}#endif/* }}} *//* {{{ proto bool posix_setegid(long uid)   Set effective group id */#ifdef HAVE_SETEGIDPHP_FUNCTION(posix_setegid){	long egid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &egid) == FAILURE) {		RETURN_FALSE;	}	if (setegid(egid) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}		RETURN_TRUE;}#endif/* }}} *//* {{{ proto array posix_getgroups(void)   Get supplementary group id's (POSIX.1, 4.2.3) */#ifdef HAVE_GETGROUPSPHP_FUNCTION(posix_getgroups){	gid_t  gidlist[NGROUPS_MAX];	int    result;	int    i;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	if ((result = getgroups(NGROUPS_MAX, gidlist)) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}	if (array_init(return_value) == FAILURE) {		/* TODO: Should we issue a warning here so we don't have ambiguity		 * with the above return value ?		 */		RETURN_FALSE;	}	for (i=0; i<result; i++) {		add_next_index_long(return_value, gidlist[i]);	}}#endif/* }}} *//* {{{ proto string posix_getlogin(void)    Get user name (POSIX.1, 4.2.4) */#ifdef HAVE_GETLOGINPHP_FUNCTION(posix_getlogin){	char *p;		if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}		if (NULL == (p = getlogin())) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}		RETURN_STRING(p, 1);}#endif/* }}} *//* {{{ proto int posix_getpgrp(void)   Get current process group id (POSIX.1, 4.3.1) */PHP_FUNCTION(posix_getpgrp){	pid_t  pgrp;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	pgrp = getpgrp();	RETURN_LONG(pgrp);}/* }}} *//* {{{ proto int posix_setsid(void)   Create session and set process group id (POSIX.1, 4.3.2) */#ifdef HAVE_SETSIDPHP_FUNCTION(posix_setsid){	pid_t  sid;		if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}		sid = setsid();	RETURN_LONG(sid);}#endif/* }}} *//* {{{ proto bool posix_setpgid(int pid, int pgid)   Set process group id for job control (POSIX.1, 4.3.3) */PHP_FUNCTION(posix_setpgid){	long pid, pgid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &pid, &pgid) == FAILURE) {		RETURN_FALSE;	}		if (setpgid(pid, pgid) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}		RETURN_TRUE;}/* }}} *//* {{{ proto int posix_getpgid(void)   Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally) */#ifdef HAVE_GETPGIDPHP_FUNCTION(posix_getpgid){	long pid;	pid_t pgid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid) == FAILURE) {		RETURN_FALSE;	}	if ((pgid = getpgid(pid)) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}	RETURN_LONG(pgid);}#endif/* }}} *//* {{{ proto int posix_getsid(void)   Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally) */#ifdef HAVE_GETSIDPHP_FUNCTION(posix_getsid){	long pid;	pid_t sid;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid) == FAILURE) {		RETURN_FALSE;	}	if ((sid = getsid(pid)) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}	RETURN_LONG(sid);}#endif/* }}} *//* {{{ proto array posix_uname(void)   Get system name (POSIX.1, 4.4.1) */PHP_FUNCTION(posix_uname){	struct utsname u;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {		RETURN_FALSE;	}	if (uname(&u) < 0) {		POSIX_G(last_error) = errno;		RETURN_FALSE;	}	if (array_init(return_value) == FAILURE) {		/* TODO: Should we issue a warning here so we don't have ambiguity		 * with the above return value ?		 */		RETURN_FALSE;	}	add_assoc_string(return_value, "sysname",  u.sysname,  1);	add_assoc_string(return_value, "nodename", u.nodename, 1);	add_assoc_string(return_value, "release",  u.release,  1);	add_assoc_string(return_value, "version",  u.version,  1);	add_assoc_string(return_value, "machine",  u.machine,  1);#ifdef _GNU_SOURCE	add_assoc_string(return_value, "domainname", u.domainname, 1);#endif}/* }}} *//* POSIX.1, 4.5.1 time() - Get System Time							already covered by PHP

⌨️ 快捷键说明

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