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

📄 os.c

📁 Apache HTTP Server 是一个功能强大的灵活的与HTTP/1.1相兼容的web服务器.这里给出的是Apache HTTP服务器的源码。
💻 C
字号:
/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as * applicable. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * This file will include OS specific functions which are not inlineable. * Any inlineable functions should be defined in os-inline.c instead. */#include "httpd.h"#include "http_core.h"#include "os.h"#include "scoreboard.h"#include "http_log.h"static FILE *sock_fp;#ifndef __PIPE_int pipe(int fildes[2]){    errno = ENOSYS;    return(-1);}#endif  /* fork and exec functions are not defined on   TPF due to the implementation of tpf_fork() */ pid_t fork(void){    errno = ENOSYS;    return(-1);}int execl(const char *path, const char *arg0, ...){    errno = ENOSYS;    return(-1);}int execle(const char *path, const char *arg0, ...){    errno = ENOSYS;    return(-1);}int execve(const char *path, char *const argv[], char *const envp[]){    errno = ENOSYS;    return(-1);}int execvp(const char *file, char *const argv[]){    errno = ENOSYS;    return(-1);}pid_t os_fork(server_rec *s, int slot){    struct tpf_fork_input fork_input;    APACHE_TPF_INPUT input_parms;    int count;    listen_rec *lr;    fflush(stdin);    if (dup2(fileno(sock_fp), STDIN_FILENO) == -1)        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s,        "unable to replace stdin with sock device driver");    fflush(stdout);    if (dup2(fileno(sock_fp), STDOUT_FILENO) == -1)        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s,        "unable to replace stdout with sock device driver");    input_parms.generation = ap_my_generation;    input_parms.scoreboard_heap = ap_scoreboard_image;    lr = ap_listeners;    count = 0;    do {        input_parms.listeners[count] = lr->fd;        lr = lr->next;        count++;    } while(lr != ap_listeners);    input_parms.slot = slot;    input_parms.restart_time = ap_restart_time;    fork_input.ebw_data = &input_parms;    fork_input.program = ap_server_argv0;    fork_input.prog_type = TPF_FORK_NAME;    fork_input.istream = TPF_FORK_IS_BALANCE;    fork_input.ebw_data_length = sizeof(input_parms);    fork_input.parm_data = "-x";    return tpf_fork(&fork_input);}int os_check_server(char *server) {#ifndef USE_TPF_DAEMON    int rv;    int *current_acn;    if((rv = inetd_getServerStatus(server)) == INETD_SERVER_STATUS_INACTIVE)        return 1;    else {        current_acn = (int *)cinfc_fast(CINFC_CMMACNUM);        if(ecbp2()->ce2acn != *current_acn)            return 1;    }#endif    return 0;}AP_DECLARE(apr_status_t) ap_os_create_privileged_process(    const request_rec *r,    apr_proc_t *newproc, const char *progname,    const char * const *args,    const char * const *env,    apr_procattr_t *attr, apr_pool_t *p){    return apr_proc_create(newproc, progname, args, env, attr, p);}

⌨️ 快捷键说明

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