// 創(chuàng)建一個(gè)守護(hù)進(jìn)程每間隔10秒向當(dāng)前目錄下的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子進(jìn)程,父進(jìn)程退出
if((pid = fork()) > 0)
{
exit(0);
}
// 2.創(chuàng)建新會(huì)話,使得子進(jìn)程脫離了原來(lái)的控制終端,會(huì)話期,進(jìn)程組
setsid();
// 3.改變工作目錄為不可卸載之目錄
chdir("/");
// 4.重置文件權(quán)限掩碼
umask(0);
// 5.關(guān)閉不需要的文件描述符以供后續(xù)使用
max_fd = 3; // 打開的最大文件描述符
for(i = 0; i < max_fd; i++)
close(i);
// 以下為守護(hù)進(jìn)程的具體執(zhí)行代碼
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;
}
// 通過(guò)主機(jī)名稱獲取主機(jī)的詳細(xì)信息
// struct hostent *gethostbyname(const char *name);
// 參數(shù):主機(jī)名稱
// 返回值:主機(jī)信息結(jié)構(gòu)體
#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
// 通過(guò)命令行參數(shù)傳入主機(jī)名稱
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;
// 分析結(jié)構(gòu)體數(shù)據(jù)并打印
// 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.打印地址長(zhǎng)度
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;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。