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

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

作者: 赋闲 | 来源:发表于2017-02-20 11: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;
}

相关文章

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

  • mysql 体系结构与管理

    MySQL基本概念 C/S 架构TCP/IP 和socket 连接实例:mysqld(守护进程)+ master ...

  • socket知识积累01

    进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的...

  • # iOS基础 # 网络知识学习整理

    网络通信三要素 通过 “IP” 找服务器,通过 “端口” 找进程, 通过 “协议” 确定如何传输数据 IP地址(主...

  • 你需要知道的TCP/IP

    前言 TCP/IP 协议 是网络通信的基石,TCP/IP 协议 不是只有 TCP 和 IP 协议,它是整个网络通信...

  • 关于socket

    1.网络通信的前提 两个不同主机的进程要进行网络通信首先就是需要找到对方,找到唯一能标识进程的方法。网络层的IP地...

  • 【Socket】概念和API解析

    概念 背景: 在网络中,一个进程的唯一标识 = IP + port + 协议。进程有了唯一标识,就可以进行网络通信...

  • 2018-10-25

    Socket网络通信 网络中进程通信:利用三元组(ip地址,协议,端口)标识;其中,ip地址作用于网络层,协议和端...

  • socket通信—实现网络间的IO通信

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。多个TCP连接或者应用进程可能...

  • rsync服务企业应用

    守护进程服务企业应用: 守护进程多模块功能配置 守护进程的排除功能实践 守护进程来创建备份目录 守护进程的访问控制...

网友评论

      本文标题:网络通信四——守护进程和回弹IP——1-14

      本文链接:https://www.haomeiwen.com/subject/rxlfwttx.html