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

📄 dhcpv6_client.c

📁 关于Linux下DHCP支持IPv6的版本实现
💻 C
字号:
#include "stdhead.h"void read_config_file (char **config_buff, char *file_name){    int fd, n, size = 0;        if ((fd = open (file_name, O_RDONLY)) == -1)    {	printf ("Error opening file %s.\n", file_name);	exit (0);    }        (*config_buff) = (char *) realloc (*config_buff, 1);    size = 1;    while (read (fd, &(*config_buff)[size - 1], 1) > 0)    {	size++;	*config_buff = (char *) realloc (*config_buff, size);    }    (*config_buff)[size - 1] = '\0';    close (fd);}    void skip_whitespace (char **curr_ptr){    while ((**curr_ptr == ' ') || (**curr_ptr == '\t') || (**curr_ptr == '\r') || (**curr_ptr == '\n'))	(*curr_ptr)++;}int move_across_substring (char **curr_ptr, char *substring){    *curr_ptr = strstr (*curr_ptr, substring);    if (*curr_ptr)	*curr_ptr += strlen (substring);    else	return 0;    return 1;}void read_token (char **token, char **curr_ptr){    char *p;    int n = 0;        if (*token)	*token = (char *) realloc (*token, 0);        while ((**curr_ptr != ' ') && (**curr_ptr != '\t') && (**curr_ptr != '\r') && (**curr_ptr != '\n'))    {	n++;	*token = (char *) realloc (*token, n);	p = *token + (n - 1);	*p = **curr_ptr;	(*curr_ptr)++;    }    n++;    *token = (char *) realloc (*token, n);    p = *token + (n - 1);    *p = '\0';}char ** get_all_interfaces (char * file_name, int * count){    char ** interface = 0 , ** p = 0;    char * buff = 0, * curr_ptr = 0, *token = 0;    read_config_file (&buff, DEFAULT_SOLICIT_CONFIG_FILE);    curr_ptr = buff;    *count = 0;        while (move_across_substring (&curr_ptr, "interface"))    {	skip_whitespace (&curr_ptr);	read_token (&token, &curr_ptr);	interface = (char **) realloc (interface, ++(*count) * sizeof (char *));	p = interface + (*count) -1;	*p = (char *) malloc (strlen (token) * sizeof (char));	strcpy (*p, token);    }    return interface;}int main (){    char ** interface, **p;    int i , n;    char command [100];    pid_t child;        interface = get_all_interfaces (DEFAULT_SOLICIT_CONFIG_FILE, &n);    for (i = 0; i < n; i++)    {	p = interface + i;	if ((child = fork ()) == 0)	{	    printf ("Fork for interface %s successful.\n", *p);	    if (execlp ("cli", "cli", *p, (char *) 0) < 0)		printf ("Exec for interface %s failed.\n", *p);	    else		printf ("Exec for interface %s successful.\n", *p);	}	else if (child == -1)	    printf ("Fork for interface %s failed.\n", *p);    }    exit (0);}

⌨️ 快捷键说明

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