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

📄 instances.c

📁 一个网络流量分析的完整的程序
💻 C
字号:
/***instances.c - handler routines for multiple IPTraf instancesCopyright (c) Gerard Paul Java 1998This software is open source; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.This program is distributed WITHOUT ANY WARRANTY; without even theimplied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License in the included COPYING file fordetails.***/#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include "error.h"#include "dirs.h"#include "instances.h"extern int daemonized;void gen_lockfile_name(char *tagfile, char *iface, char *result){    if (iface == NULL)        snprintf(result, 64, "%s.all", tagfile);    else        snprintf(result, 64, "%s.%s", tagfile, iface);}void mark_facility(char *tagfile, char *facility, char *iface){    int fd;    char errstring[80];    char lockfile[64];        gen_lockfile_name(tagfile, iface, lockfile);    fd = open(lockfile, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR);    if (fd < 0) {	snprintf(errstring, 80, "Warning: unable to lock %s on %s", facility, iface);	write_error(errstring, daemonized);    }    close(fd);    strncpy(active_facility_lockfile, lockfile, 64);}void unmark_facility(char *tagfile, char *iface){    char lockfile[64];        gen_lockfile_name(tagfile, iface, lockfile);    unlink(lockfile);    strcpy(active_facility_lockfile, "");}int facility_active(char *tagfile, char *iface){    int fd;    char lockfile[64];        gen_lockfile_name(tagfile, iface, lockfile);    fd = open(lockfile, O_RDONLY);    if (fd < 0)	return 0;    else {	close(fd);	return 1;    }}/* * Increments or decrements the process count */int adjust_instance_count(char *countfile, int inc){    int fd;    int proccount = 0;    int brw;    fd = open(countfile, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);    brw = read(fd, &proccount, sizeof(int));    if ((brw == 0) || (brw == -1))	proccount = 0;    proccount += inc;        if (proccount < 0)        proccount = 0;    lseek(fd, 0, SEEK_SET);    brw = write(fd, &proccount, sizeof(int));    close(fd);        return proccount;}int get_instance_count(char *countfile){    int fd;    int proccount = 0;    int br;        fd = open(countfile, O_RDONLY);    br = read(fd, &proccount, sizeof(int));    if ((br == 0) || (br == -1))        proccount = 0;            close(fd);    return proccount;}/* * Returns TRUE if this is the last instance, and is therefore responsible * for restoring the promicuous states saved by the first instance. * * Man, this is getting more complex by the minute :) */int is_last_instance(void){    int fd;    int proccount = 0;    int br;    fd = open(PROCCOUNTFILE, O_RDONLY);    br = read(fd, &proccount, sizeof(int));    close(fd);    return ((proccount == 1) || (br < 0) || fd < 0);}/* * Returns TRUE if no facilities are currently running in other instances of * IPTraf.  Call this before the first invocation of adjust_process_count(1) */int first_active_facility(void){    int fd;    int proccount = 0;    int br;    fd = open(PROCCOUNTFILE, O_RDONLY);    br = read(fd, &proccount, sizeof(int));    close(fd);    return ((proccount == 0) || (br < 0) || (fd < 0));}

⌨️ 快捷键说明

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