資源簡介
本資源實(shí)現(xiàn)了一個(gè)簡單的IRC server,支持客戶端和服務(wù)器端的通信

代碼片段和文件信息
/*?$begin?csapp.c?*/
#include?“csapp.h“
/**************************?
?*?Error-handling?functions
?**************************/
/*?$begin?errorfuns?*/
/*?$begin?unixerror?*/
void?unix_error(char?*msg)?/*?unix-style?error?*/
{
????fprintf(stderr?“%s:?%s\n“?msg?strerror(errno));
????exit(0);
}
/*?$end?unixerror?*/
void?posix_error(int?code?char?*msg)?/*?posix-style?error?*/
{
????fprintf(stderr?“%s:?%s\n“?msg?strerror(code));
????exit(0);
}
void?dns_error(char?*msg)?/*?dns-style?error?*/
{
????fprintf(stderr?“%s:?DNS?error?%d\n“?msg?h_errno);
????exit(0);
}
void?app_error(char?*msg)?/*?application?error?*/
{
????fprintf(stderr?“%s\n“?msg);
????exit(0);
}
/*?$end?errorfuns?*/
/*********************************************
?*?Wrappers?for?Unix?process?control?functions
?********************************************/
/*?$begin?forkwrapper?*/
pid_t?Fork(void)?
{
????pid_t?pid;
????if?((pid?=?fork())?0)
unix_error(“Fork?error“);
????return?pid;
}
/*?$end?forkwrapper?*/
void?Execve(const?char?*filename?char?*const?argv[]?char?*const?envp[])?
{
????if?(execve(filename?argv?envp)?0)
unix_error(“Execve?error“);
}
/*?$begin?wait?*/
pid_t?Wait(int?*status)?
{
????pid_t?pid;
????if?((pid??=?wait(status))?0)
unix_error(“Wait?error“);
????return?pid;
}
/*?$end?wait?*/
pid_t?Waitpid(pid_t?pid?int?*iptr?int?options)?
{
????pid_t?retpid;
????if?((retpid??=?waitpid(pid?iptr?options))?0)?
unix_error(“Waitpid?error“);
????return(retpid);
}
/*?$begin?kill?*/
void?Kill(pid_t?pid?int?signum)?
{
????int?rc;
????if?((rc?=?kill(pid?signum))?0)
unix_error(“Kill?error“);
}
/*?$end?kill?*/
void?Pause()?
{
????(void)pause();
????return;
}
unsigned?int?Sleep(unsigned?int?secs)?
{
????unsigned?int?rc;
????if?((rc?=?sleep(secs))?0)
unix_error(“Sleep?error“);
????return?rc;
}
unsigned?int?Alarm(unsigned?int?seconds)?{
????return?alarm(seconds);
}
?
void?Setpgid(pid_t?pid?pid_t?pgid)?{
????int?rc;
????if?((rc?=?setpgid(pid?pgid))?0)
unix_error(“Setpgid?error“);
????return;
}
pid_t?Getpgrp(void)?{
????return?getpgrp();
}
/************************************
?*?Wrappers?for?Unix?signal?functions?
?***********************************/
/*?$begin?sigaction?*/
handler_t?*Signal(int?signum?handler_t?*handler)?
{
????struct?sigaction?action?old_action;
????action.sa_handler?=?handler;??
????sigemptyset(&action.sa_mask);?/*?block?sigs?of?type?being?handled?*/
????action.sa_flags?=?SA_RESTART;?/*?restart?syscalls?if?possible?*/
????if?(sigaction(signum?&action?&old_action)?0)
unix_error(“Signal?error“);
????return?(old_action.sa_handler);
}
/*?$end?sigaction?*/
void?Sigprocmask(int?how?const?sigset_t?*set?sigset_t?*oldset)
{
????if?(sigprocmask(how?set?oldset)?0)
unix_error(“Sigprocmask?error“);
????return;
}
void?Sigemptyset(sigset_t?*set)
{
????if?(sigemptyset(set)?0)
unix_error(“Sigemptyset?error“);
????return;
}
void?Sigfillset(sigset_t?*set)
{?
????if?(sigfillset(set)?0)
unix_error(“Sigfillset?error
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2011-04-11?09:31??simple?IRC?server\
?????文件???????17744??2011-03-24?21:14??simple?IRC?server\csapp.c
?????文件???????17744??2011-03-24?21:14??simple?IRC?server\csapp.c~
?????文件????????5575??2011-03-15?18:54??simple?IRC?server\csapp.h
?????文件???????12064??2011-04-11?09:24??simple?IRC?server\csapp.o
?????文件?????????356??2011-03-21?16:09??simple?IRC?server\Makefile
?????文件?????????348??2011-03-20?15:01??simple?IRC?server\Makefile~
?????文件??????????30??2011-03-15?18:54??simple?IRC?server\node1.conf
?????文件?????????729??2011-03-15?18:54??simple?IRC?server\rtgrading.c
?????文件????????1317??2011-03-15?18:54??simple?IRC?server\rtgrading.h
?????文件????????5088??2011-03-15?18:54??simple?IRC?server\rtlib.c
?????文件????????3689??2011-03-15?18:54??simple?IRC?server\rtlib.h
?????文件????????4728??2011-04-11?09:24??simple?IRC?server\rtlib.o
?????文件???????33831??2011-04-11?09:24??simple?IRC?server\sircd
?????文件???????24498??2011-04-11?09:24??simple?IRC?server\sircd.c
?????文件???????24521??2011-04-11?09:24??simple?IRC?server\sircd.c~
?????文件?????????806??2011-04-10?10:03??simple?IRC?server\sircd.h
?????文件?????????864??2011-04-08?20:10??simple?IRC?server\sircd.h~
?????文件???????12152??2011-04-11?09:24??simple?IRC?server\sircd.o
評(píng)論
共有 條評(píng)論