C陷阱与缺陷(五)

来源:互联网 发布:幕墙光污染模拟软件 编辑:程序博客网 时间:2024/04/30 00:41

 库函数

函数库调用

系统调用

在所有的ANSI C编译器版本中,C库函数是相同的

各个操作系统的系统调用是不同的

它调用函数库中的一段程序(或函数)

它调用系统内核的服务

与用户程序相联系

是操作系统的一个入口点

在用户地址空间执行

在内核地址空间执行

它的运行时间属于“用户时间”

它的运行时间属于“系统”时间

属于过程调用,调用开销较小

需要在用户空间和内核上下文环境间切换,开销较大

在C函数库libc中有大约300个函数

在UNIX中大约有90个系统调用

典型的C函数库调用:system fprintf malloc

典型的系统调用:chdir fork write brk;

库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。

 学习链接:

http://c.biancheng.net/cpp/u/hanshu/    C语言中文网

 

 signal() 函数

C 库函数 void (*signal(int sig, void (*func)(int)))(int) 设置一个函数来处理信号,即带有 sig 参数的信号处理程序。

 signal() 函数的声明。

void (*signal(int sig, void (*func)(int)))(int)


http://www.runoob.com/cprogramming/c-function-signal.html   菜鸟教程

errno函数

头文件:#include <errno.h>

函数原型:errno

功能:记录系统的最后一次错误代码

参数:无

返回值:错误代号(整型值)

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { 
        fprintf(stderr, "errno = %d \n", errno); 
        exit(1); 
    } 
printf("Socket opened successfully \n"); 
//errno 返回整型错误代号。 

 

getchar函数

概念:

getchar 由宏实现:#define getchar() getc(stdin)getchar有一个int型的返回值.当程序调用getchar.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

1.getchar是以行为单位进行存取的。
当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOFWindows下为组合键Ctrl+ZUnix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOFEOF将在后面讨论)时,getchar才会停止执行,整个程序将会往下执行。譬如下面程序段:

while((c = getchar()) != EOF){
putchar(c);
}

即无论你输入多少字符,只有当换行或结束时,才会执行while循环。

2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF

char c;
c = getchar();

为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下,并且本身返回值就是int
int c;
c = getchar();

 

文件操作函数

文件操作函数API后续再总结说明。

0 0
原创粉丝点击