信息安全设计基础第十周学习总结

附录A 错误处理

1.Unix系统中的错误处理

Unix风格的wait函数遇到一个错误(例如没有子进程要回收),它就返回-1,并将全局变量errno设置为知名错误原因的错误代码。如果wait成功完成,就返回有用的结果。
错误代码的形式:

if ((pid = wait(NULL)) < 0){
	fprintf(stderr,"wait error:%s\n",strerror(errno));
	exit(0);
}

其中,strerror函数返回某个errno值的文本描述。

2.Posix风格的错误处理

Posix风格:任何有用的结果都返回在通过引用传递进来的函数参数中。Posix风格的错误代码的形式:

if((retcode = pthread_create(&tid,NULL,thread,NULL))!=0){
	fprintf(stderr,"pthread_create error: %s\n",strerror(retcode));
	exit(0);
}

3.DNS风格的错误处理

函数在失败时返回NULL指针,并设置全局变量h_errno。
错误代码的形式:
if((p=gethostbyname(name))==NULL){
fprintf(stdder,"gethostname error: %s\n:",hstrerror(h_errno));
exit(0);
}

错误函数报告的代码

void unix_error(char *msg)
{
	fprintf(stderr,"%s: %s\n",msg,strerror(errno));
	exit(0);
}

void poisx_error(int code,char *msg)
{
	fprintf(stderr, "%s: %s\n",msg,strerror(code));
	exit(0);
}
void dns_error(char *msg)
{
	fprintf(stderr,k "%s: DNS error %d\n",msg,h_errno);
	exit(0);
}
void app_error(char *msg)
{
	fprintf(stderr,"%s\n",msg);
	exit(0);
}
pid_Wait(int *status)
{
	pid_t pid;
	if ((pid = wait(status)) < 0)
		unix_error("Wait error");
	return pid;
}

错误处理包装函数

Unix风格的错误处理包装函数

void Kill(pid_t pid,int signum)
{
	int rc;
	if ((rc = kill(pid,signum)) < 0)
		unix_error("Kill error");
}

Posix风格的错误处理包装函数
void Ppthread_detach(pthread_t tid){
int rc;
if ((rc = pthread_detach(tid))!=0)
posix_error(rc, "Pthread_detach error");
}

DNS风格的错误处理包装函数
struct hostent *Gethostbyname(const char *name)
{
struct hostent *p;
if ((p=gethostbyname(name))==NULL)
dns_error("Gethostbyname error");
return p;
}

参考资料:《深入理解计算机系统》

问题及解决:运行实践代码时,一开始用vc运行,缺少头文件。之后网上找了头文件的源码,插入到工程中,依然还是不可以。VC打不开头文件。查阅了一下,原来该文件需要在Linux系统(非Windows系统)下才能执行。后来在虚拟机中,无法直接粘贴复制主机文件代码。通过学习后,将设备—->共享设备->共享剪贴板中,选择双向就可以解决了。代码内容还在尝试阶段。

posted @ 2015-11-15 11:06  20135311不是富东京  阅读(174)  评论(0编辑  收藏  举报