亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 嵌入式系統設計與實例開發實驗教材二源碼 多線程應用程序設計 串行端口程序設計 AD接口實驗 CAN總線通信實驗 GPS通信實驗 Linux內核移植與編譯實驗 IC卡讀寫實驗 SD驅動使
?? C
字號:
/*kHTTPd -- the next generationMain programkHTTPd TNG consists of 1 thread, this main-thread handles ALL connectionssimultanious. It does this by keeping queues with the requests in differentstages.The stages are<not accepted> 		-	TCP/IP connection is not accepted yetWaitForHeaders		-	Connection is accepted, waiting for headersDataSending		-	Headers decoded, sending file-dataUserspace		-	Requires userspace daemon Logging			-	The request is finished, cleanup and loggingA typical flow for a request would be:<not accepted>WaitForHeadersDataSendingLoggingor<not accepted>WaitForHeadersUserspace*//**************************************************************** *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2, or (at your option) *	any later version. * *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *	GNU General Public License for more details. * *	You should have received a copy of the GNU General Public License *	along with this program; if not, write to the Free Software *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ****************************************************************/static int errno;#define __KERNEL_SYSCALLS__#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/init.h>#include <linux/wait.h>#include <linux/smp_lock.h>#include <asm/unistd.h>#include "structure.h"#include "prototypes.h"#include "sysctl.h"struct khttpd_threadinfo threadinfo[CONFIG_KHTTPD_NUMCPU];  /* The actual work-queues */atomic_t	ConnectCount;atomic_t	DaemonCount;static int	ActualThreads; /* The number of actual, active threads */static int ConnectionsPending(int CPUNR){	if (threadinfo[CPUNR].DataSendingQueue!=NULL) return O_NONBLOCK;	if (threadinfo[CPUNR].WaitForHeaderQueue!=NULL) return O_NONBLOCK;	if (threadinfo[CPUNR].LoggingQueue!=NULL) return O_NONBLOCK;	if (threadinfo[CPUNR].UserspaceQueue!=NULL) return O_NONBLOCK;  return 0;}static wait_queue_head_t DummyWQ[CONFIG_KHTTPD_NUMCPU];static atomic_t Running[CONFIG_KHTTPD_NUMCPU]; static int MainDaemon(void *cpu_pointer){	int CPUNR;	sigset_t tmpsig;		DECLARE_WAITQUEUE(main_wait,current);		MOD_INC_USE_COUNT;		CPUNR=0;	if (cpu_pointer!=NULL)	CPUNR=(int)*(int*)cpu_pointer;	sprintf(current->comm,"khttpd - %i",CPUNR);	daemonize();		init_waitqueue_head(&(DummyWQ[CPUNR]));		/* Block all signals except SIGKILL, SIGSTOP and SIGHUP */	spin_lock_irq(&current->sigmask_lock);	tmpsig = current->blocked;	siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP)| sigmask(SIGHUP));	recalc_sigpending(current);	spin_unlock_irq(&current->sigmask_lock);			if (MainSocket->sk==NULL)	 	return 0;	add_wait_queue_exclusive(MainSocket->sk->sleep,&(main_wait));	atomic_inc(&DaemonCount);	atomic_set(&Running[CPUNR],1);		while (sysctl_khttpd_stop==0)	{		int changes = 0;								changes +=AcceptConnections(CPUNR,MainSocket);		if (ConnectionsPending(CPUNR))		{			changes +=WaitForHeaders(CPUNR);			changes +=DataSending(CPUNR);			changes +=Userspace(CPUNR);			changes +=Logging(CPUNR);			/* Test for incoming connections _again_, because it is possible			   one came in during the other steps, and the wakeup doesn't happen			   then.			*/			changes +=AcceptConnections(CPUNR,MainSocket);		}				if (changes==0) 		{			(void)interruptible_sleep_on_timeout(&(DummyWQ[CPUNR]),1);				if (CPUNR==0) 				UpdateCurrentDate();		}					if (signal_pending(current)!=0)		{			(void)printk(KERN_NOTICE "kHTTPd: Ring Ring - signal received\n");			break;		  		}		}		remove_wait_queue(MainSocket->sk->sleep,&(main_wait));		StopWaitingForHeaders(CPUNR);	StopDataSending(CPUNR);	StopUserspace(CPUNR);	StopLogging(CPUNR);		atomic_set(&Running[CPUNR],0);	atomic_dec(&DaemonCount);	(void)printk(KERN_NOTICE "kHTTPd: Daemon %i has ended\n",CPUNR);	MOD_DEC_USE_COUNT;	return 0;}static int CountBuf[CONFIG_KHTTPD_NUMCPU];/*The ManagementDaemon has a very simple task: Start the real daemons when the user wants usto, and cleanup when the users wants to unload the module.Initially, kHTTPd didn't have this thread, but it is the only way to have "delayed activation",a feature required to prevent accidental activations resulting in unexpected backdoors.*/static int ManagementDaemon(void *unused){	sigset_t tmpsig;	int waitpid_result;		DECLARE_WAIT_QUEUE_HEAD(WQ);			sprintf(current->comm,"khttpd manager");	daemonize();		/* Block all signals except SIGKILL and SIGSTOP */	spin_lock_irq(&current->sigmask_lock);	tmpsig = current->blocked;	siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP) );	recalc_sigpending(current);	spin_unlock_irq(&current->sigmask_lock);	/* main loop */	while (sysctl_khttpd_unload==0)	{		int I;						/* First : wait for activation */				sysctl_khttpd_start = 0;				while ( (sysctl_khttpd_start==0) && (!signal_pending(current)) && (sysctl_khttpd_unload==0) )		{			current->state = TASK_INTERRUPTIBLE;			interruptible_sleep_on_timeout(&WQ,HZ); 		}				if ( (signal_pending(current)) || (sysctl_khttpd_unload!=0) )		 	break;		 			/* Then start listening and spawn the daemons */		 			if (StartListening(sysctl_khttpd_serverport)==0)		{			continue;		}				ActualThreads = sysctl_khttpd_threads;		if (ActualThreads<1) 			ActualThreads = 1;					if (ActualThreads>CONFIG_KHTTPD_NUMCPU) 			ActualThreads = CONFIG_KHTTPD_NUMCPU;				/* Write back the actual value */				sysctl_khttpd_threads = ActualThreads;				InitUserspace(ActualThreads);				if (InitDataSending(ActualThreads)!=0)		{			StopListening();			continue;		}		if (InitWaitHeaders(ActualThreads)!=0)		{			I=0;			while (I<ActualThreads)			{				StopDataSending(I);				I++;			}			StopListening();			continue;		}			/* Clean all queues */		memset(threadinfo, 0, sizeof(struct khttpd_threadinfo));		 			I=0;		while (I<ActualThreads)		{			atomic_set(&Running[I],1);			(void)kernel_thread(MainDaemon,&(CountBuf[I]), CLONE_FS | CLONE_FILES | CLONE_SIGHAND);			I++;		}				/* Then wait for deactivation */		sysctl_khttpd_stop = 0;		while ( (sysctl_khttpd_stop==0) && (!signal_pending(current)) && (sysctl_khttpd_unload==0) )		{			if (atomic_read(&DaemonCount)<ActualThreads)			{				I=0;				while (I<ActualThreads)				{					if (atomic_read(&Running[I])==0)					{						atomic_set(&Running[I],1);						(void)kernel_thread(MainDaemon,&(CountBuf[I]), CLONE_FS | CLONE_FILES | CLONE_SIGHAND);						(void)printk(KERN_CRIT "kHTTPd: Restarting daemon %i \n",I);					}					I++;				}			}			interruptible_sleep_on_timeout(&WQ,HZ);						/* reap the daemons */			waitpid_result = waitpid(-1,NULL,__WCLONE|WNOHANG);					}						/* The user wants us to stop. So stop listening on the socket. */		if (sysctl_khttpd_stop!=0)			{			/* Wait for the daemons to stop, one second per iteration */			while (atomic_read(&DaemonCount)>0)		 		interruptible_sleep_on_timeout(&WQ,HZ);			StopListening();		}				}		sysctl_khttpd_stop = 1;	/* Wait for the daemons to stop, one second per iteration */	while (atomic_read(&DaemonCount)>0) 		interruptible_sleep_on_timeout(&WQ,HZ);					waitpid_result = 1;	/* reap the zombie-daemons */	while (waitpid_result>0)		waitpid_result = waitpid(-1,NULL,__WCLONE|WNOHANG);			StopListening();			(void)printk(KERN_NOTICE "kHTTPd: Management daemon stopped. \n        You can unload the module now.\n");	MOD_DEC_USE_COUNT;	return 0;}int __init khttpd_init(void){	int I;	MOD_INC_USE_COUNT;		I=0;	while (I<CONFIG_KHTTPD_NUMCPU)	{		CountBuf[I]=I;				I++;	}		atomic_set(&ConnectCount,0);	atomic_set(&DaemonCount,0);		/* Maybe the mime-types will be set-able through sysctl in the future */	   		 	AddMimeType(".htm","text/html"); 	AddMimeType("html","text/html"); 	AddMimeType(".gif","image/gif"); 	AddMimeType(".jpg","image/jpeg"); 	AddMimeType(".png","image/png"); 	AddMimeType("tiff","image/tiff"); 	AddMimeType(".zip","application/zip");	AddMimeType(".pdf","application/pdf"); 	AddMimeType("r.gz","application/x-gtar"); 	AddMimeType(".tgz","application/x-gtar");	AddMimeType(".deb","application/x-debian-package");	AddMimeType("lass","application/x-java");	AddMimeType(".mp3","audio/mpeg");	AddMimeType(".txt","text/plain");		AddDynamicString("..");	AddDynamicString("cgi-bin");	StartSysctl();		(void)kernel_thread(ManagementDaemon,NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);		return 0;}void khttpd_cleanup(void){	EndSysctl();}	module_init(khttpd_init)	module_exit(khttpd_cleanup)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51精品视频一区二区三区| 九九久久精品视频| 91丨porny丨蝌蚪视频| 中文在线一区二区| 91电影在线观看| 亚洲h在线观看| 日韩欧美亚洲另类制服综合在线| 看国产成人h片视频| 久久久国产精品麻豆| 成人国产精品免费观看动漫| 亚洲五码中文字幕| 视频一区在线播放| 久久婷婷一区二区三区| 丰满亚洲少妇av| 一区二区三区视频在线看| 欧美福利视频一区| 国产夫妻精品视频| 亚洲小说春色综合另类电影| 884aa四虎影成人精品一区| 国产一区视频网站| 玉米视频成人免费看| 欧美一区二区三区四区在线观看 | 欧美一区二区在线看| 激情综合网最新| 国产精品久久久久久久第一福利 | 国产99久久久国产精品免费看| 亚洲欧洲日产国码二区| 欧美日韩免费观看一区三区| 激情综合网最新| 亚洲一区二区综合| 久久久777精品电影网影网| 色综合久久99| 国产一区二区在线影院| 亚洲一区二区三区四区不卡| 久久蜜桃av一区精品变态类天堂| 91亚洲国产成人精品一区二区三 | 日本不卡中文字幕| 国产精品国产三级国产a| 91精品黄色片免费大全| youjizz久久| 国产一区二区在线影院| 亚洲高清免费视频| 亚洲同性gay激情无套| 精品国产123| 欧美日韩视频第一区| 成人动漫在线一区| 国产自产视频一区二区三区| 亚洲国产成人高清精品| 国产精品久线在线观看| 精品sm捆绑视频| 欧美浪妇xxxx高跟鞋交| 日本久久一区二区三区| aaa欧美色吧激情视频| 久久99国产精品久久| 三级久久三级久久久| 一区二区三区中文字幕| 国产精品欧美综合在线| 精品理论电影在线| 欧美一区二区三区在线看| 欧美性三三影院| 在线中文字幕不卡| 91丨porny丨户外露出| 成人免费观看男女羞羞视频| 精品中文字幕一区二区| 久久成人综合网| 美洲天堂一区二卡三卡四卡视频| 亚洲国产成人高清精品| 亚洲午夜久久久久中文字幕久| 亚洲欧美日韩在线不卡| 亚洲视频在线观看一区| 中文字幕一区二区5566日韩| 欧美国产精品劲爆| 国产精品国产精品国产专区不蜜| 中文字幕成人网| 中文字幕久久午夜不卡| 国产精品色婷婷久久58| 亚洲欧洲日本在线| 亚洲人123区| 夜夜操天天操亚洲| 天堂在线亚洲视频| 男男gaygay亚洲| 极品少妇一区二区| 精品一区二区三区视频在线观看| 国内精品在线播放| 国产成人综合视频| 91视频免费播放| 日本电影亚洲天堂一区| 欧美人体做爰大胆视频| 欧美一级在线观看| 久久久精品国产99久久精品芒果 | 亚洲自拍另类综合| 亚洲电影一级片| 日本在线不卡视频| 韩国理伦片一区二区三区在线播放| 国产精品一区二区黑丝| 成人激情免费电影网址| 色素色在线综合| 91麻豆精品国产自产在线| 精品国产sm最大网站| 亚洲欧洲在线观看av| 亚洲一卡二卡三卡四卡五卡| 日本成人在线看| 成人一级黄色片| 在线免费亚洲电影| 精品国产三级电影在线观看| 国产欧美精品国产国产专区 | 5566中文字幕一区二区电影| 久久久一区二区| 亚洲精品视频免费观看| 日韩av网站免费在线| 国产成人在线观看免费网站| 色系网站成人免费| 精品国产电影一区二区| 亚洲欧美成aⅴ人在线观看| 日韩av在线免费观看不卡| 国产99久久久精品| 欧美日本在线一区| 欧美高清在线视频| 天堂蜜桃91精品| 99久久精品国产观看| 欧美精品v日韩精品v韩国精品v| 久久久精品免费观看| 五月激情综合婷婷| 97久久久精品综合88久久| 日韩精品一区二区三区视频| 亚洲裸体在线观看| 国产真实乱对白精彩久久| 在线观看一区日韩| 久久久精品国产免费观看同学| 亚洲成人三级小说| 成人av中文字幕| 久久免费看少妇高潮| 五月天激情小说综合| 色拍拍在线精品视频8848| 精品国产91乱码一区二区三区 | 国产精品77777| 91精品国产欧美一区二区| 国产精品久久久久久久久果冻传媒| 欧美三电影在线| 在线亚洲欧美专区二区| 国产精品三级视频| 精品在线观看视频| 91精品国产麻豆国产自产在线| 亚洲三级免费观看| 成人久久久精品乱码一区二区三区 | 狠狠色丁香久久婷婷综| 欧美视频一二三区| 亚洲综合色婷婷| 欧美日韩国产电影| 一区二区在线看| 色综合久久六月婷婷中文字幕| 国产精品天天看| 国产高清视频一区| 久久女同精品一区二区| 看片网站欧美日韩| 日韩精品在线网站| 久久99国产精品久久| 日韩欧美国产系列| 久久精品999| 日韩一级片在线播放| 日韩成人免费电影| 欧美一级高清片| 久国产精品韩国三级视频| 欧美一级片在线看| 免费高清视频精品| 欧美电影免费观看高清完整版在线 | 欧美日本一区二区三区四区| 亚洲最新视频在线观看| 欧美在线一区二区三区| 亚洲一区电影777| 欧美日韩一二三| 日韩中文欧美在线| 精品免费视频.| 国产一区二区三区av电影| 欧美精品一区男女天堂| 国产一区二区在线影院| 国产欧美一区二区精品性| 不卡电影一区二区三区| 亚洲人成网站精品片在线观看| 色域天天综合网| 天天操天天色综合| 精品奇米国产一区二区三区| 国产在线播放一区二区三区| 国产欧美日韩另类视频免费观看 | 亚洲一区在线视频观看| 欧美疯狂做受xxxx富婆| 国产一区二区中文字幕| 国产精品国产三级国产普通话三级| 91国偷自产一区二区三区观看| 亚洲第一成人在线| 精品久久久影院| 成人免费毛片app| 午夜欧美在线一二页| 欧美精品一区二区精品网| 成人天堂资源www在线| 亚洲综合一区二区| 精品粉嫩超白一线天av| 不卡的电视剧免费网站有什么| 亚洲激情图片qvod| 精品美女被调教视频大全网站|