库函数
函数库调用 | 系统调用 |
在所有的ANSI C编译器版本中,C库函数是相同的 | 各个操作系统的系统调用是不同的 |
它调用函数库中的一段程序(或函数) | 它调用系统内核的服务 |
与用户程序相联系 | 是操作系统的一个入口点 |
在用户地址空间执行 | 在内核地址空间执行 |
它的运行时间属于“用户时间” | 它的运行时间属于“系统”时间 |
属于过程调用,调用开销较小 | 需要在用户空间和内核上下文环境间切换,开销较大 |
在C函数库libc中有大约300个函数 | 在UNIX中大约有90个系统调用 |
典型的C函数库调用:system fprintf malloc | 典型的系统调用:chdir fork write brk; |
库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。
学习链接:
http://c.biancheng.net/cpp/u/hanshu/ C语言中文网
函数
C 库函数 void (*signal(int sig, void (*func)(int)))(int) 设置一个函数来处理信号,即带有 sig 参数的信号处理程序。
函数的声明。
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进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF,EOF将在后面讨论)时, getchar才会停止执行,整个程序将会往下执行。譬如下面程序段:
while((c = getchar()) != EOF){
putchar(c);
}
即无论你输入多少字符,只有当换行或结束时,才会执行while循环。
2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。
char c;
c = getchar();
为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下,并且本身返回值就是int:
int c;
c = getchar();
文件操作函数
文件操作函数API后续再总结说明。