inetd启动服务器进程

利用inetd启动守护进程的方法:

1.编写服务器程序:
【1】cd /home/xfn
【2】vi abc.c
#include <stdio.h>

int main()
{
    char buf[] = "Hello!";
    write(0, buf, sizeof(buf));
 //write(1, buf, sizeof(buf)); //0,1,2都重定向到了与客户端建立的socket之上,这里实际上就是往socket中写
 //write(2, buf, sizeof(buf));
 
 //read(0, buf, sizeof(buf));//0,1,2都重定向到了与客户端建立的socket之上,这里实际上就是从socket中读
 //read(1, buf, sizeof(buf));
 read(2, buf, sizeof(buf));
 write(0, buf, sizeof(buf));
 
    return 0;
}
【3】gcc -o abc abc.c
这样就生成了可执行文件/home/xfn/abc。

2.进行服务设置:
【1】vi /etc/services,添加如下内容:
www     17777/tcp
其中www表示服务名,17777是服务的端口,tcp是服务的协议。
【2】cd /etc/xinetd.d/
【3】vi www,文件名并不一定要与服务名相同:
service www
{
    disable = no
    port = 17777
    socket_type = stream
    protocol = tcp
    user = root
    server = /home/xfn/abc
    type = UNLISTED
    wait = no
}
【4】killall -HUP xinetd
【5】netstat -na | grep 17777
tcp        0      0 0.0.0.0:17777               0.0.0.0:*                   LISTEN
注意,此时必须存在文件/home/xfn/abc,否则有可能netstat -na | grep 17777会看不到任何信息。

3.编写客户端:
【1】客户端代码如下:vi test.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <strings.h>
int main()
{
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
 struct sockaddr_in address;
 address.sin_family = AF_INET;
 address.sin_port = htons(17777);
 address.sin_addr.s_addr = htonl(INADDR_ANY);
 
 if (connect(sockfd, (struct sockaddr*)&address, sizeof(address)) == 0)
 {
     char buf[1024] = {0};
  read(sockfd, buf, sizeof(buf));
  printf("%s/n", buf);
  
  bzero(buf, sizeof(buf));
  write(sockfd, "www", 3);
  read(sockfd, buf, sizeof(buf));
  printf("%s/n", buf); 
 }
 else
     printf("connetc error!/n");
 return 0; 
}
【2】编译:gcc -o test test.c
【5】执行:./test
Hello!

重启服务器之后,运行test仍然能输出Hello!,即守护进程仍然有效!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值