新发现的一些C函数
今天看lsocket代码,发现有三个C函数,以前一直没有用过。
觉得特别有意思,一个strspn,一个strrchr,一个getaddrinfo。
- strspn
#include <string.h>
size_t strspn(const char *s , const char *accept);
计算从字符串s的起始位置开始,连续并且完全属于accept字符串中字符的个数(有点绕)。
直接上代码:
char *addr = "127.0.0.1";
int pfx = strspn(addr,"0123456789.");
printf("pfx:%d \n",pfx); // --> 9 就是说addr中所有的字符都属于 “01234567489.” char *bad = "12w.0.0.1";
int bcount = strspn(bad,"0123456789.");
print("bcount: %d\n",bcount); // --> 2 就是说从bad字符串开始计算,只有前两个连续的字符才属于“0123456789.”
- strrchr
#include <string.h>
char *strrchr(const char *s , int c);
strrchr与strchr刚好相反,前者返回的是最后一次出现在s中的位置,后者返回第一次出现在s中的位置。
char *str = "";
char *p ;
p = strrchr(str,'');
printf("p:%s\n",p); //P: 56 说明找到了,是最后两个字符
- getaddrinfo
以前一直都是用gethostbyname和gethostbyaddr,但是这两个函数仅支持IPv4。
此外,getaddrinfo函数还能够处理名字到地址、服务到端口这两种转换。
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int getaddrinfo(const char *node,const char * service,const struct addrinfo *hints,struct addrinfo **res);
返回一个sockaddr结构的链表,而不是一个地址清单。
node》一个主机名或者地址串(IPv4的点分十进制、IPv6的16进制串)
service》十进制的端口,或定义的服务名称,如ftp、http等
hints》可以是一个空指针,也可以是addrinfo结构体指针,填入关于期望返回的信息类型。
可以指定即支持TCP也可支持UDP,可以设置ai_socktype成员变量为SOCK_DGRAM使得返回的仅仅是适用于数据报套接口的信息。
res》返回一个指向addrinfo结构体链表的指针。
示例如下:
type = SOCK_STREAM;
struct addrinfo hint, *info = ;
char svc[TOSTRING_BUFSIZ];
memset(&hint, , sizeof(hint));
hint.ai_family = AF_UNSPEC;
hint.ai_socktype = type;
hint.ai_protocol = type == SOCK_STREAM ? IPPROTO_TCP : IPPROTO_UDP;
if (_needsnolookup(addr)) //判断地址类型
hint.ai_flags = AI_NUMERICHOST;
snprintf(svc, TOSTRING_BUFSIZ , "%d", port); int err = getaddrinfo(addr, svc, &hint, &info);//0成功,非0出错
成功之后就可以取数据:
int *family ;
int *protocol;
socklen_t *slen;
struct sockaddr *sa; *family = info->ai_family;
*slen = info->ai_addrlen;
*protocol = info->ai_protocol;
memcpy(sa, info->ai_addr, *slen);
最后不要忘记调用freeaddrinfo(info);
新发现的一些C函数的更多相关文章
- 新发现的mbstowcs, mbstowcs_s函数,转换多字节到宽字符
http://en.cppreference.com/w/c/string/multibyte/mbstowcs https://msdn.microsoft.com/fr-fr/library/ey ...
- 新发现一个函数:GradientFill
位于Msimg32.dll之中 https://msdn.microsoft.com/en-us/library/windows/desktop/dd144957(v=vs.85).aspx
- 10个鲜为人知的WordPress函数
WordPress功能强大,非常适合开发者使用.说到 WordPress,那么,我们不得不说他的钩子函数.今天,要为大家推荐10个WordPress函数.大多数,都是我们常用的功能,不过,经常不知道如 ...
- c语言指针函数与函数指针
例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...
- 1、C语言中的函数指针
一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...
- C语言函数指针(转载)
二.通常的函数调用 一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int a ...
- C语言函数名与函数指针详解
一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...
- 彻底搞定C指针--“函数名与函数指针”
函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); 点击打开链 ...
- 彻底搞定C指针-函数名与函数指针【转】
转自:http://blog.csdn.net/a1232345/article/details/43524371 函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子://自行包含头 ...
随机推荐
- 用MVC+EF快速弄出一个CRUD
瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在 ...
- 工作日志(DJ)
ajax传参: $.post("MAIN_JSHandler.ashx", { "retInfoCode&q ...
- 数组自定义排序:IComparable和IComparer接口
首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...
- [转]How to compile GDB for iOS!
ref:http://reverse.put.as/2012/04/16/how-to-compile-gdb-for-ios/ source code: http://www.opensource. ...
- generating permunation
generating permunation——全排列(算法汇总) #include <iostream> #include <string> #include <vec ...
- SharePoint SPHierarchyDataSourceControl+SPTreeView
今天使用SPHierarchyDataSourceControl和SPTreeView来显示SharePoint文档库层级结构的过程中,发现一直在报下面的错误: The target 'ctl00$c ...
- jQuery判断元素是否显示与隐藏
jQuery判断一个元素是显示还是隐藏,jQuery使用is()方法来判断一个元素是否显示,反之则为隐藏 核心代码 if($("#username").is(":hidd ...
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- Nginx安装配置与HelloWorld
<深入理解Nginx>阅读与实践(一):Nginx安装配置与HelloWorld 最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码 ...
- iOS 开发问题集锦(一)
最近在QQ群里好多人问一些比较基础的问题,在这罗列一下: 1.键盘上的斜杠键坏掉了,怎么样用快捷键进行注释呢? 首先在Xcode中注释的默认快捷键为:command+/: 其次可以自行修改快捷键:Xc ...