网络通信四——守护进程和回弹IP——1-14

2017-02-20  本文已影响0人  赋闲
// 创建一个守护进程每间隔10秒向当前目录下的daemon.log文件写入一条"hello shangqian!!"

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int _running = 1;

int main(int argc, char *argv[])
{
    pid_t pid = 0;
    int i = 0;
    int max_fd = 0;

    // 1.fork子进程,父进程退出
    if((pid = fork()) > 0)
    {
        exit(0);
    }
    
    // 2.创建新会话,使得子进程脱离了原来的控制终端,会话期,进程组
    setsid();
    
    // 3.改变工作目录为不可卸载之目录
    chdir("/");
    
    // 4.重置文件权限掩码
    umask(0);
    
    // 5.关闭不需要的文件描述符以供后续使用
    max_fd = 3;     // 打开的最大文件描述符
    for(i = 0; i < max_fd; i++)
        close(i);
    
    // 以下为守护进程的具体执行代码
    int fd = open("/home/vicliu/daemon.log", O_APPEND | O_CREAT, 0644);
    char *p = "hello shangqian!"; 
    while(_running)
    {
        write(fd, p, strlen(p));
    }
    close(fd);

    return 0;
}
// 通过主机名称获取主机的详细信息

// struct hostent *gethostbyname(const char *name);
// 参数:主机名称
// 返回值:主机信息结构体

#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
    // 通过命令行参数传入主机名称
    if(argc != 2)
    {
        printf("usage : %s <host_name>\n", argv[0]);
        return 0;
    }

    int i = 0;
    struct hostent *p = gethostbyname(argv[1]);
    struct in_addr *q = NULL;
    
    // 分析结构体数据并打印
    // 1.打印官方名称
    printf("official name : %s\n", p->h_name);
    
    // 2.打印别名列表
    while(p->h_aliases[i] != NULL)
    {
        printf("aliases[%d] : %s\n", i, p->h_aliases[i]);
        i++;
    }
    
    // 3.打印地址类型
    if(p->h_addrtype == AF_INET)
    {
        printf("addr type : AF_INET\n");
    }
    else if(p->h_addrtype == AF_INET6)
    {
        printf("addr type : AF_INET6\n");
    }
    
    // 4.打印地址长度
    printf("addr length : %d\n", p->h_length);
    
    // 5.打印IP地址列表
    i = 0;
    while(p->h_addr_list[i] != NULL)
    {
        q = (struct in_addr *)p->h_addr_list[i];
        printf("addr list[%d] : %s\n", i, inet_ntoa(*q));
        i++;
    }
    
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读