Linux_C函数参考手册.docx
Linux C函数参考相关函数 表头文件 定义函数 函数说明返回值附加说明范例isalpha, isdigit, islower» isupper#include<ctype.h>int isalnum (int c)检查参数c是否为英文字母或阿拉伯数字,在标准c中相当于使用 (isalpha( c )11 isdigit( c )做测试。若参数c为字母或数字,则返回TRUE,否则返回NULL(0)。此为宏定义,非真正函数。/找出str字符串中为英文字母或数字的字符/#include < ctype.h> main()char str=,123c#FDsPer; inti;for (i=O;stri!=O;i+)if (isalnum(stri) printf("%c is an alphanumeric charactern",stri); 1执行1 is an apphabetic character 2 is an apphabetic character 3 is an apphabetic character c is an apphabetic character F is an apphabetic character D is an apphabetic character s is an apphabetic character P is an apphabetic character e is an apphabetic character相关函数isalnum, islower, isupper表头文件#include<ctype.h>定义函数int isalpha (int c)函数说明检查参数c是否为英文字母,在标准c中相当于使用(isupper (c) llislower (c)做测试。返回值若参数C为英文字母,贝返回TRUE,否则返回NULL( 0 )。附加说明此为宏定义,非真正函数范例/找出str字符串中为英文字母的字符/#include <ctype.h>main()char str=,123c#FDsPer;inti;for (i=O;stri!=O;i+)if(isalpha(stri) printf(w%c is an alphanumeric characternM,stri); 1执行c is an apphabetic character F is an apphabetic character D is an apphabetic character s is an apphabetic character P is an apphabetic character e is an apphabetic character相关函数iscntrl表头文件#include <ctype.h>定义函数int isascii(int c);函数说明检査参数c是否为ASCII码字符,也就是判断c的范围是否在0到 127之间。返回值若参数c为ASCII码字符,则返回TRUE,否则返回NULL ( 0 )«附加说明此为宏定义,非真正函数。范例/判断inti是否具有对映的ASCII码字符*/#include<ctype.h>main()int i;for(i=125;i<130;i+)if(isascii(i)printf(n%d is an ascii character:%cnH,i,i); elseprintf(H%d is not an ascii charactern",i);|执行125 is an ascii character:126 is an ascii character:-127 is an ascii character:128 is not an ascii character129 is not an ascii characteriscntrl(测试字符是否为ASCI!码的控制字符)相关函数isascii表头文件#include <ctype.h>定义函数int iscntrl(int c);函数说明检査参数c是否为ASCI!控制码,也就是判断c的范围是否在0到 30之间返回值若参数c为ASCII控制码,则返回TRUE,否则返回NULL (0)»附加说明此为宏定义,非真正函数。isdigit (测试字符是否为阿拉伯数字)相关函数isxdigit表头文件#include<ctype.h>定义函数int isdigit(int c)函数说明检査参数c是否为阿拉伯数字0到9。返回值若参数c为阿拉伯数字,则返回TRUE,否则返回NULL ()附加说明此为宏定义,非真正函数。范例/找出str字符串中为阿拉伯数字的字符/#include<ctype.h>main()(char str=u123®#FDsPe?M;int i;for(i=0;stri!=0;i+)if(isdigit(str(i) printf(H%c is an digit characternM,stri);执行1 is an digit character2 is an digit character3 is an digit characterisgraphis (测试字符是否为可打印字符)相关函数isprint表头文件#include <ctype.h>定义函数int isgraph (int c)函和出oh检查参数c是否为可打印字符,若c所对映的ASCH码可打印,且非空格字符则返回TRUE。返回值若参数c为可打印字符,贝返回TRUE,否则返回NULL ()附加说明此为宏定义,非真正函数范例/判断str字符串中哪些为可打印字符/#i ncl tide vc type. h> main() (char str=Ha5 ;M;int i;for(i=0;stri !=0;i+)if(isgraph(stri) printf(nstr%d is printable character:%dnn,i,stri); 执行strO is printable charactersstrl is printable character:5str3 is printable character: str4 is printable character:;islower (测试字符是否为小写字母)相关函数isalpha, isupper表头文件#include<ctype.h>定义函数int islower(int c)函数说明检查参数c是否为小写英文字母。返回值若参数C为小写英文字母,则返回TRUE,否则返回NULL (0)。附加说明此为宏定义,非真正函数。范例|#include<ctype.h>main()char str=n123®#FDsPe?M;inti;for(i=0;stri !=0;i+)if(islower(stri) printf(n%c is a lower-case charactern",stri);)执行 Ic is a lower-case characters is a lower-case charactere is a lower-case characterisprint (测试字符是否为可打印字符)相关函数isgraph表头文件#include<ctype.h>定义函数int isprint(int c);曲将;出日日检查参数c是否为可打印字符,若c所对映的ASCH码可打印,其留效说明中包含空格字符,则返回TRUE。返冋值若参数c为可打印字符,则返回TRUE,否则返回NULL ()。附加说明 此为宏定义,非真正函数。范例/判断str字符串中哪些为可打印字符包含空格字符/#include<ctype.h> main() (char str='*a5 ;M;inti;for(i=0;stri !=O;i+)if(isprint(stri) printf(Hstr%d is printable character:%dnu,i,strij); )执行strO is printable charactersstrl is printable character:5str2 is printable character:str3 is printable character: str4 is printable character:;isspace (测试字符是否为空格字符)相关函数isgraph表头文件#include<ctype.h>定义函数int isspace (int c)检查参数c是否为空格字符,也就是判断是否为空格(”)、定位字函数说明符(,)、CR(,)、换行()、垂直定位字符(V,)或翻页()的情况。返回值若参数c为空格字符,则返回TRUE,否则返回NULL (0)。附加说明此为宏定义,非真正函数/将字符串str中内含的空格字符找出,并显示空格字符的ASCH码#include <ctype.h>main()char str=M123c # FDtsPe?nM;inti;for(i=0;stri !=0;i+)if(isspace(stri)printf(Mstr%d is a white-space character:%dnH,i,stri);执行str4 is a white-space character:32str7 is a white-space character:32str10 is a white-space character/* t */str 16 is a white-space character: 10/* t */ispunct (测试字符是否为标点符号或特殊符号)相关函数isspace, isdigit, isalpha表头文件#inlude<ctype.h>定义函数int ispunct (int c)函数说明检查参数C是否为标点符号或特殊符号。返回TRUE也就是代表参 数c为非空格、非数字和非英文字母。返回值若参数c为标点符号或特殊符号,则返叵1 TRUE,否则返回NULL (0),附加说明此为宏定义,非真正函数范例/列出字符串str中的标点符号或特殊符号/#include <ctype.h>main()(char str=n123c #FDsPe?M;int i;for(i=0;strij!=0;i+)if(ispunct(stri) printf(M%cnn,stri);执行#?isupper (测试字符是否为大写英文字母)相关函数isalpha, islower表头文件#include<ctype.h>定义函数int isupper(int c)函数说明检查参数c是否为大写英文字母。返回值若参数c为大写英文字母,则返回TRUE,否则返回NULL (0)。附加说明此为宏定义,非真正函数范例/找出字符串str中为大写英文字母的字符/#include <ctype.h>main()char str=H123c#FDsPe?H;inti;for(i=0;stri !=0;i+)if(isupper(stri) printf(M%c is an uppercase characternM,stri);执行F is an uppercase characterD is an uppercase characterPis an uppercase characterisxdigit (测试字符是否为16进制数字)相关函数isalnum, isdigit表头文件#include<ctype.h>定义函数int isxdigit (int c)函数说明检查参数c是否为16进制数字,只要c为下列其中一个情况则返回TRUE。16 进制数字:0123456789ABCDEF返回值若参数c为16进制数字,则返回TRUE,否则返回NULL (0).附加说明此为宏定义,非真正函数。范例/找出字符串str中为十六进制数字的字符/#include <ctype.h> main()char str=H123c#FDsPe?H;inti;for(i=0;stri!=0;i+)if(isxdigit(stri) printf(n%c is a hexadecimal digitsnM,stri); 1执行1 is a hexadecimal digits2 is a hexadecimal digits3 is a hexadecimal digits c is a hexadecimal digits F is a hexadecimal digits D is a hexadecimal digits e is a hexadecimal digitsatof (将字符串转换成浮点型数)相关函数atoi, atol, strtod, strtol, strtoul表头文件#include <stdlib.h>定义函数double atof(const char *nptr);函数说明atof ()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上 数字或正负符号开始做转换,而再遇到非数字或字符串结束时 C0')结束转换,并将结果返回。参数nptr字符串可包含正负 号、小数点或E (e)来表示指数部分,如123.456或123e-2。返回值返回转换后的浮点型数。附加说明atof()与使用 strtod (nptr,(char*)NULL):结果相同。范例/将字符串a与字符串b转换成数字后相加/#include<stdlib.h>main()char *a="- 100.23”;char *b200e2”;float c;c=atof(a)+atof(b);printf("c=%.2fn”,c);执行Ic=-98.23atoi(将字符串转换成整型数)相关函数atof, atol, atrtod, strtol, strtoul表头文件#include<stdlib.h>定义函数int atoi(const char *nptr);函数说明atoi()会扌1描参数nptr字符串,跳过前面的空格字符,直到遇上数字 或正负符号开始做转换,而再遇到非数字或字符串结束时(、。') 结束转换,并将结果返回。返回值返回转换后的整型数。附加说明atoiO与使用 strtol(nptr, (char*) NULL, 10);结果相同。范例/将字符串a与字符串b转换成数字后相加/#include<stdlib.h>mian()char a 100”;char b="456"int c;c=atoi(a)+atoi(b);printf(c=%dn",c);)执行c=356沆1 (将字符串转换成长整型数)相关函数atof» atoi, strtod» strtol» strtoul表头文件#include<stdlib.h>定义函数long atol(const char *nptr);atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字函数说明或正负符号开始做转换,而再遇到非数字或字符串结束时(、0')结束转换,并将结果返回。返回值返回转换后的长整型数。附加说明atol()与使用 strtol(nptr,(char*)NULL, 10);结果相同。/将字符串a与字符串b转换成数字后相加/#include<stdlib.h>main()char a=,1000000000,char b''234567890"long c;c=atol(a)+atol(b);printf(4tc=%dn",c);)执行c=1234567890gCVt (将浮点型数转换为字符串,取四舍五入)相关函数ecvt» fcvt, sprintf表头文件#include<stdlib.h>定义函数函数说明char *gcvt(double number, size_t ndigits, char *buf);gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示 显示的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换 后的字符串包含小数点或正负符号。若转换成功,转换后的字符串 会放在参数buf指针所指的空间。返回值附加说明返回一字符串指针,此地址即为buf指针。#include<stdlib.h> main()double a= 123.45;double b=-1234.56;char *ptr;int decpt,sign;gcvt(a,5,ptr);printf(*a value=%snM,ptr);ptr=gcvt(b,6,ptr);printf(ub value=%sn,ptr);执行a value= 123.45b value=-1234.56strtod (将字符串转换成浮点数)相关函数atoi, atol, strtod, strtol, strtoul表头文件#include<stdlib.h>定义函数double strtod(const char *nptr,char *endptr);strtod。会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数 字或正负符号开始做转换,直到出现非数字或字符串结束时函数说明(0')结束转换,并将结果返回。若endptr不为NULL,则会 将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数 nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如 123.456 或 !23e-2o返回值返回转换后的浮点型数。附加说明参考 atof ()/将字符串a, b, c分别采用10, 2, 16进制转换成数字/#include<stdlib.h>mian()char 1000000000”;char b 10000000(XT;charc=,ffff,;printfC4a=%dn,strtod(a,NULL, 10);printf(44b=%dn,strtod(b,NULL,2);printfC4c=%dn,strtod(c,NULL, 16);执行Ia=1000000000b=512c=65535strtol (将字符串转换成长整型数)相关函数atof, atoi, atol, strtod, strtoul表头文件#include<stdlib.h>定义函数long int strtol(const char *nptr,char *endptr,int base);strtol 会将参数nptr字符串根据参数base来转换成长整型数。 参数base范围从2至36,或0。参数base代表采用的进制方式, 如base值为10则采用!0进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如Ox前置字符函数说明则会使用16进制做转换。开始strtol ()会扫描参数nplr字符串, 跳过前面的空格字符,直到遇上数字或正负符号开始做转换,再 遇到非数字或字符串结束时('、)结束转换,并将结果返回。若参数 endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指 针由endptr返回。返回值返回转换后的长整型数,否则返回ERANGE并将错误代码存入 errno 中。附加说明ERANGE指定的转换字符串超出合法范围。相关函数 表头文件 定义函数函数说明返回值附加说明/将字符串a, b, c分别采用10, 2, 16进制转换成数字/#include<stdlib.h>main()char a=,1000000000,char b 10000000(XT;chare ffff'printfC4a=%dn,strtol(a,NULL,10);printfC4b=%dnM,strtol(b,NULL,2);printfC4c=%dn,strtol(c,NULL, 16);执行Ia=1000000000b=512c=65535strtoul (将字符串转换成无符号长整型数)atof, atoi, atol, strtod, strtol#include<stdlib.h>unsigned long int strtoul(const char *nptr,char *endptr,int base);strtoul。会将参数nptr字符串根据参数base来转换成无符号的长整 型数。参数base范围从2至36,或。参数base代表采用的进制 方式,如base值为10则采用!0进制,若base值为16则采用!6 进制数等。当base值为0时则是采用10进制做转换,但遇到如Ox' 前置字符则会使用16进制做转换。开始strtoul 会扫描参数 nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号 开始做转换,再遇到非数字或字符串结束时(、')结束转换,并 将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终 止的nptr中的字符指针由endptr返回。返回转换后的长整型数,否则返回ERANGE并将错误代码存入 ermo 中。ERANGE指定的转换字符串超出合法范围。参考 strtol()toascii (将整型数转换成合法的ASCII码字符)相关函数isascii, toupper, tolower表头文件#include<ctype.h>定义函数int toascii(int c)函数说明toascii ()会将参数C转换成?位的unsigned char值,第八位则会 被清除,此字符即会被转成ASCII码字符。返回值将转换成功的ASCII码字符值返回。范例#include<stdlib.h>main()(int a=217;char b;printf(4tbefore toascii (): a value =%d(%c)n,a,a);b=toascii(a);printf(4tafter toascii(): a value =%d(%c)n,b,b);执行before toascii(): a value =217()after toascii(): a value =89(Y)Slower(将大写字母转换成小写字母)isalpha, toupper#include<stdlib.h>int tolower(int c);若参数c为大写字母则将该对应的小写字母返回。返回转换后的小写字母,若不须转换则将参数C值返回。附加说明范例/*将S字符串内的大写字母转换成小写字母/#include<ctype.h> main()char saBcDeFgH 12345;!#$”;int i;printf(44before tolower(): %sn",s);for(i=0;l<sizeof(s);i+)si=tolower(si);printf(44after tolower(): %sn",s);执行before tolower(): aBcDeFgH 12345; !#$after tolower(): abcdefgh 12345; !#$toupper (将小写字母转换成大写字母)相关函数isalpha, tolower表头文件#include<ctype.h>定义函数int toupper(int c);函数说明若参数C为小写字母则将该对映的大写字母返回。返冋值返冋转换后的大写字母,若不须转换则将参数C值返回。附加说明/将S字符串内的小写字母转换成大写字母/#include<ctype.h>main()char s aBcDeFgH 12345;!#$”;inti;printf(i4before toupper(): %snM,s);for(i=0;l<sizeof(s);i+)s|i=toupper(si);printf(*after toupper(): %sn”,s);执行before toupper(): aBcDeFgH 12345; !#$after toupper(): ABCDEFGH 12345; !#$Calloc(配置内存空间)相关函数malloc, free, realloc, brk表头文件#include <stdlib.h>定义函数void *calloc(size_t nmemb, size_t size);calloc。用来配置nmemb个相邻的内存单位,每单位的大小为函数说明size,并返回指向第一个元素的指针。这和使用下列的方式效果相 同:malloc(nmemb* size);不过,在利用calloc。配置内存时会将内存 内容初始化为0。返回值若配置成功则返回一指针,失败则返回NULLo范例/动态配置10个struct test空间/#include<stdlib.h>struct test(int a10;char b20;)main()struct test *ptr=calloc(sizeof(struct test), 10);free (释放原先配置的内存)相关函数malloc, calloc> realloc, brk表头文件#include<stdlib.h>定义函数void free(void *ptr);函数说明参数ptr为指向先前由malloc ()、calloc()或realloc。所返回的内存 指针。调用free。后pir所指的内存空间便会被收回。假若参数ptr 所指的内存空间已被收回或是未知的内存地址,则调用free。可能 会有无法预期的情况发生。若参数ptr为NULL,则free。不会有任 何作用。getpagesize (取得内存分页大小)相关函数sbrk表头文件#include<unistd.h>定义函数size_t getpagesize(void);函数说明返回一分页的大小,单位为字节(byte)。此为系统的分页大小,不 一定会和硬件分页大小相同。返回值内存分页大小。附加说明在Intelx86上其返回值应为4096bytes。范例#include <unistd.h>main()printf(4tpage size = %dn,getpagesize();malloc(配置内存空间)|相关函数calloc, free, realloc, brk表头文件#include<stdlib.h>定义函数void * malloc(size_t size);函数说明malloc 用来配置内存空间,其大小由指定的size决定。返回值若配置成功则返回一指针,失败则返回NULL。范例void p = malloc( 1024); Ik 的内存/mmap健立内存映射)相关函数munmap, open表头文件#include <unistd.h>#include <sys/mman.h>定义函数void *mmap(void *start,size_t length,int prot,int flags,int fd,off offsize);函数说明mmap。用来将某个文件内容映射到内存中,对该内存区域的存取即 是直接对该文件内容的读写。参数start指向欲对应的内存起始地址,通常设为NULL,代表让系 统自动选定地址,对应成功后该地址会返回。参数length代表将文 件中多大的部分对应到内存。参数prot代表映射区域的保护方式, 有下列组合:PROT_EXEC映射区域可被执行PROT_READ映射区域可被读取PROT_WRITE映射区域可被写入PROT_NONE映射区域不能存取参数flags会影响映射区域的各种特性:MAP_FIXED如果参数start所指的地址无法成功建立映射时, 则放弃映射,不对地址做修正。通常不鼓励用此 旗标。MAP_SHARED对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。MAP_PRIVATE对映射区域的写入操作会产生一个映射文件的 复制,即私人的“写入时复制"(copy on write) 对此区域作的任何修改都不会写回原来的文 件内容。MAP一ANONYMOUS建立匿名映射。此时会忽略参数fd,不涉 及文件,而且映射区域无法和其他进程共 享。MAP_DENYWRITE只允许对映射区域的写入操作,其他对文件 直接写入的操作将会被拒绝。MAP.LOCKED将映射区域锁定住,这表示该区域不会被置换 (swap) 在调用mmap()时必须要指定MAP_SHARED或 MAP一PRIVATE。 参数fd为。pen()返回的文件描述词,代表欲映射到内存的文件。参 数offset为文件映射的偏移量,通常设置为0,代表从文件最前方 开始对应,offset必须是分页大小的整数倍。若映射成功则返回映射区的内存起始地址,否则返回MAP_FAILED (1),错误原因存于errno中。错误代码EBADF参数fd不是有效的文件描述词EACCES存取权限有误。如果是MAP.PRIVATE情况文件必须 可读,使用MAP_SHARED则要有PROT_WRITE以及 该文件要能写入。EINVAL 参数 start、length 或 offset 有一个不合法。EAGAIN文件被锁住,或是有太多内存被锁住。ENOMEM 内存不足。/利用mmap()来读取/etc/passwd文件内容/#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/mman.h>main()(int fd;void *start;struct stat sb;fd=open("/etc/passwd",O_RDONLY); / 打开/etc/passwd*/ fstat(fd,&sb); /取得文件大小/start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);if(start= = MAP_FAILED) / 判断是否映射成功/return;printf(“s”,start);munma(start,sb.st_size); / 解除映射/ closed(fd);执行root: x : 0 : root: /root: /bin/bashbin : x : 1: 1 : bin : /bin :daemon : x : 2 : 2 :daemon : /sbinadm : x : 3 : 4 : adm : /var/adm :Ip : x :4 :7 : Ip : /var/spool/lpd :sync : x : 5 : 0 : sync : /sbin : bin/sync :shutdown : x : 6 : 0 : shutdown : /sbin : /sbin/shutdownhalt: x : 7 : 0 : halt: /sbin : /sbin/haltmail : x : 8 : 12 : mail: /var/spool/mail :news : x :9 :13 : news : /var/spool/news :uucp : x :10 :14 : uucp : /var/spool/uucp :operator : x : 11 : 0 operator : /root:games : x : 12 :100 : games :/usr/games:gopher : x : 13 : 30 : gopher : /usr/lib/gopher-data:ftp: x :14 :50 : FTP Use亡 /home/ftp:nobody : x :99: 99: Nobody : /:xfs :x JOO :101 : X Font Serve