• 大小: 241KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签: linux  

资源简介

udev(userspace device management)的源代码

资源截图

代码片段和文件信息

/*
 * Copyright (C) 2003-2004 Greg Kroah-Hartman 
 * Copyright (C) 2004-2006 Kay Sievers 
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation version 2 of the License.
 * 
 * This program is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program; if not write to the Free Software Foundation Inc.
 * 51 Franklin Street Fifth Floor Boston MA  02110-1301 USA.
 *
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include “udev.h“
#include “udev_rules.h“
#include “udev_selinux.h“

#ifdef USE_LOG
void log_message(int priority const char *format ...)
{
va_list args;

if (priority > udev_log_priority)
return;

va_start(args format);
vsyslog(priority format args);
va_end(args);
}
#endif

static void asmlinkage sig_handler(int signum)
{
switch (signum) {
case SIGALRM:
exit(1);
case SIGINT:
case SIGTERM:
exit(20 + signum);
}
}

int main(int argc char *argv[] char *envp[])
{
struct sysfs_device *dev;
struct udevice *udev;
const char *maj *min;
struct udev_rules rules;
const char *action;
const char *devpath;
const char *subsystem;
struct sigaction act;
int devnull;
int retval = -EINVAL;

if (argc == 2 && strcmp(argv[1] “-V“) == 0) {
printf(“%s\n“ UDEV_VERSION);
exit(0);
}

/* set std fd‘s to /dev/null /sbin/hotplug forks us we don‘t have them at all */
devnull = open(“/dev/null“ O_RDWR);
if (devnull >= 0)  {
if (devnull != STDIN_FILENO)
dup2(devnull STDIN_FILENO);
if (devnull != STDOUT_FILENO)
dup2(devnull STDOUT_FILENO);
if (devnull != STDERR_FILENO)
dup2(devnull STDERR_FILENO);
if (devnull > STDERR_FILENO)
close(devnull);
}

logging_init(“udev“);
if (devnull < 0)
err(“open /dev/null failed: %s“ strerror(errno));
udev_config_init();
selinux_init();
dbg(“version %s“ UDEV_VERSION);

/* set signal handlers */
memset(&act 0x00 sizeof(act));
act.sa_handler = (void (*)(int)) sig_handler;
sigemptyset (&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGALRM &act NULL);
sigaction(SIGINT &act NULL);
sigaction(SIGTERM &act NULL);

/* trigger timeout to prevent hanging processes */
alarm(UDEV_ALARM_TIMEOUT);

action = getenv(“ACTION“);
devpath = getenv(“DEVPATH“);
subsystem = getenv(“SUBSYSTEM“);
/* older kernels passed the SUBSYSTEM only as argument */
if (subsystem == NULL && argc == 2)
subsystem = argv[1];

if (action == NULL || subsystem == NULL || devpath == NULL) {
err(“ac

评论

共有 条评论