UNP里学了两招

最近在看《Unix Network Programming》的时候学到了两招,一个是errno的用法,另一个是getenv函数。

errno是一个全局整形变量,我的理解是它定义在<errno.h>里。通常,C语言中函数调用失败都会返回-1或者NULL值。其实,函数除了返回一个表示出错的值外,通常还会把全局变量errno设为一个特定的值,每个操作系统都会把错误值的常量放在<errno.h>。

我们可以在函数返回错误的时候,把errno打印出来,再对着<errno.h>或者使用man命令看看到底是什么错误。比如在Ubuntu最常见是Permission denied。其实标准库也提供打印errno含义的函数,最近就是学到这个,是一个定义在<stdio.h>的函数,叫perror。perror接受一个char*字符串参数,先打印字符串,加个冒号,再打印errno值这时的含义。下面举个例子:

if (socket(AF_INET, SOCK_STREAM, 0) == -1) {
	perror("socket error");
	exit(1);
}

 

第二招是getenv函数。以前也是在附录看过这个函数,但不知道有什么用,原来函数名里env表示enviroment环境变量。使用这个函数,比如getenv(“BERRY”)就能获得环境变量BERRY的值,如果该环境变量没有定义,会返回NULL。至于去获得环境变量的值有什么用,我暂时也不是很了解,估计很多多平台的程序都会使用到这个函数。顺便一提,在Linux中,建立和修改环境变量用export命令,撤销环境变量用unset命令。

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s