⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server1.c

📁 中科院徐志伟老师一书《操作系统 原理·技术与编程》的源代码和习题接
💻 C
字号:
#include<sys/param.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h> 

int port=8000;

void init_daemon(void)
{
   pid_t pid;
   int   i;

   if ((pid = fork())==-1)  /*生成第1个子进程*/
        exit(1);     /* fork失败退出 */

   if (pid > 0)
        exit(0);     /* 父进程退出,使shell成为前台进程*/

   setsid();   /* 第1子进程成为新会话和新进程组的领头进程的同时也失去控制终端*/

   /* 第1子进程执行下面的操作 */
   for(i=0;i<NOFILE;++i)
        close(i);   /* 关闭已打开的文件描述符 */
   chdir("/rundir"); /*改变当前运行的目录*/
   umask(0);       /*改变文件创建掩码*/
   return;
}


int main(int ac,char** av)
{
   int sockfd, tsockfd;
   int addr_size;
   char buf[100];
   struct sockaddr_in s;
   struct sockaddr_in p;
   char temp_buf[256];

   init_daemon();
   sockfd=socket(AF_INET,SOCK_STREAM,0);
   if(sockfd==-1){
	perror("socket building failure");
	exit(1);
   }

   bzero(&s, sizeof(s));
   s.sin_family = AF_INET;
   s.sin_addr.s_addr = INADDR_ANY;
   s.sin_port = htons(port);

   if (bind(sockfd, (struct sockaddr *)&s, sizeof(s)) == -1) {
      perror("bind");
      exit(1);
   }
   if(listen(sockfd,10)==-1){
      perror("listen");
      exit(1);
   }

   for(;;){
   	tsockfd=accept(sockfd,(struct sockaddr*)&p,&addr_size);
   	if(tsockfd<0){
		printf("ft:%d\n",errno);
       		perror("accept");
       		exit(1);
   	}
   	if(recv(tsockfd,buf,100,0)<0){
       		perror("recv");
       		exit(1);
   	}
	strcpy(temp_buf,"Here is the first file of the president's office.");
   	if(send(tsockfd,temp_buf,strlen(temp_buf),0)<0){
       		perror("send");
       		exit(1);
	}
   	close(tsockfd);
      	printf("send:%s",temp_buf);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -