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

📄 closefrom.c

📁 根据网络原始数据生成NetFlow记录的软件。NetFlow是Cisco提出的流技术
💻 C
字号:
/* * Copyright (c) 2004 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */#include "common.h"#ifndef HAVE_CLOSEFROM#include <sys/types.h>#include <sys/param.h>#include <unistd.h>#include <stdio.h>#include <limits.h>#include <stdlib.h>#include <stddef.h>#ifdef HAVE_DIRENT_H# include <dirent.h># define NAMLEN(dirent) strlen((dirent)->d_name)#else# define dirent direct# define NAMLEN(dirent) (dirent)->d_namlen# ifdef HAVE_SYS_NDIR_H#  include <sys/ndir.h># endif# ifdef HAVE_SYS_DIR_H#  include <sys/dir.h># endif# ifdef HAVE_NDIR_H#  include <ndir.h># endif#endif#ifndef OPEN_MAX# define OPEN_MAX	256#endifRCSID("$Id: closefrom.c,v 1.1 2004/09/10 09:08:08 djm Exp $");#ifndef lintstatic const char rcsid[] = "$Sudo: closefrom.c,v 1.6 2004/06/01 20:51:56 millert Exp $";#endif /* lint *//* * Close all file descriptors greater than or equal to lowfd. */voidclosefrom(int lowfd){    long fd, maxfd;#if defined(HAVE_DIRFD) && defined(HAVE_PROC_PID)    char fdpath[PATH_MAX], *endp;    struct dirent *dent;    DIR *dirp;    int len;    /* Check for a /proc/$$/fd directory. */    len = snprintf(fdpath, sizeof(fdpath), "/proc/%ld/fd", (long)getpid());    if (len != -1 && len <= sizeof(fdpath) && (dirp = opendir(fdpath))) {	while ((dent = readdir(dirp)) != NULL) {	    fd = strtol(dent->d_name, &endp, 10);	    if (dent->d_name != endp && *endp == '\0' &&		fd >= 0 && fd < INT_MAX && fd >= lowfd && fd != dirfd(dirp))		(void) close((int) fd);	}	(void) closedir(dirp);    } else#endif    {	/*	 * Fall back on sysconf() or getdtablesize().  We avoid checking	 * resource limits since it is possible to open a file descriptor	 * and then drop the rlimit such that it is below the open fd.	 */#ifdef HAVE_SYSCONF	maxfd = sysconf(_SC_OPEN_MAX);#else	maxfd = getdtablesize();#endif /* HAVE_SYSCONF */	if (maxfd < 0)	    maxfd = OPEN_MAX;	for (fd = lowfd; fd < maxfd; fd++)	    (void) close((int) fd);    }}#endif /* HAVE_CLOSEFROM */

⌨️ 快捷键说明

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