1.如何使用守护进程,,
用init 开机启动。
先创建socket ,等socket信号/数据来了,再去做其他事情。等app给发请求或数据。
2. 我的问题:
1.app最后到库里调用so里的某函数,setip(),我怎么让他去与守护进程里的具体SetIp()通信,让守护进程来做这件事情。直接sendto,readfrom呀。
具体实现:
代码片段
client端:
发数据给server端。
#define MYPORT 8866 /*定义端口为8866*/
#define MAX_MSG_SIZE 1024
int socket_cli2serv(char* para)
{
char* Ip;
struct sockaddr_in addrSer; //创建一个记录地址信息的结构体
struct sockaddr_in addrCli;//创建一个记录地址信息的结构体
int Sockfd,n;//client socket ,socket port SOCK_STREAM
//创建一个套接字,并检测是否创建成功
/*SockCli = socket(AF_INET, SOCK_DGRAM, 0);*/
Sockfd = socket(AF_INET,SOCK_DGRAM , 0);
if(Sockfd == -1){
ADHOCLOG_SO("adhoc socket create failed!\n");
}
// server addr
//struct sockaddr_in addrSer; //创建一个记录地址信息的结构体
addrSer.sin_family = AF_INET; //使用AF_INET协议族
addrSer.sin_port = htons(63450); //设置地址结构体中的端口号
addrSer.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置通信ip
/*addrSer.sin_addr.s_addr = inet_addr("192.168.70.1"); //设置通信ip*/
//client addr
//struct sockaddr_in addrCli;//创建一个记录地址信息的结构体
addrCli.sin_family = AF_INET; //使用AF_INET协议族
addrCli.sin_port = htons(63451); //设置地址结构体中的端口号
addrCli.sin_addr.s_addr = inet_addr("127.0.0.1"); //设置通信ip
//client port bind
//将套接字地址与所创建的套接字号联系起来,并检测是否绑定成功
socklen_t addrlen = sizeof(struct sockaddr);
int res = bind(Sockfd,(struct sockaddr*)&addrCli, addrlen);
if(res == -1){
perror("bind failed!\n");
}else{
ADHOCLOG_SO("adhoc socket bind done!\n");
}
Ip=para;
/*向serv端发送数据报*/
n=sendto(Sockfd,Ip,strlen(Ip),0,(struct sockaddr *)&addrSer,sizeof(struct sockaddr));
ADHOCLOG_SO("Ip:%s, sent %d bytes to %s\n",Ip,n,inet_ntoa(addrSer.sin_addr));
close(Sockfd);
return 0;
}
https://blog.csdn.net/delphiwcdj/article/details/7364343
server端;
做成守护进程,
/
int main()
{
pid_t pid;
char *buf = "This is a Daemon, wcdj\n";
/* 屏蔽一些有关控制终端操作的信号
* 防止在守护进程没有正常运转起来时,因控制终端受到干扰退出或挂起
* */
signal(SIGINT, SIG_IGN);// 终端中断
signal(SIGHUP, SIG_IGN);// 连接挂断
signal(SIGQUIT, SIG_IGN);// 终端退出
signal(SIGPIPE, SIG_IGN);// 向无读进程的管道写数据
signal(SIGTTOU, SIG_IGN);// 后台程序尝试写操作
signal(SIGTTIN, SIG_IGN);// 后台程序尝试读操作
signal(SIGTERM, SIG_IGN);// 终止
// test
//sleep(20);// try cmd: ./test &; kill -s SIGTERM PID
// [1] fork child process and exit father process
pid = fork();
if(pid < 0)
{
perror("fork error!");
exit(1);
}
else if(pid > 0)
{
exit(0);
}
// [2] create a new session
setsid();
// [3] set current path
char szPath[1024];
if(getcwd(szPath, sizeof(szPath)) == NULL)
{
perror("getcwd");
exit(1);