新发现的一些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 函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子://自行包含头 ...
随机推荐
- 数组自定义排序:IComparable和IComparer接口
首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...
- Python Learing(一):Basic Grammar
装了python2.7,去图书馆借了python入门经典,暂且简单写下学习笔记,以供自己回忆 学习笔记(一)主要是基础语法部分: 1.python中数字以及字符串的使用; 2.输入与输出语句; 3.逻 ...
- C# 让程序自动以管理员身份运行
exe在Vista或Win7下不以管理员权限运行,会被UAC(用户帐户控制)阻止访问系统某些功能,如修改注册表操作等;如何让exe以管理员权限运行呢,方法有两种,一个是直接修改exe属性;另一个是在程 ...
- GNU 项目(开源社区的由来,背后的哲学)
转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...
- 三.redis 排序
本篇文章介绍下redis排序命令.redis支持对list,set和sorted set元素的排序.排序命令是sort 完整的命令格式如下: SORT key [BY pattern] [LIMIT ...
- 异常信息:java.lang.OutOfMemoryError: PermGen space
修改TOMCAT_HOME/bin/catalina.sh 在"echo "Using CATALINA_BASE: $CATALINA_BASE""上面 ...
- Exchange 2016 创建日程,远程服务器返回错误: (401) 未经授权
背景:在测试环境中一切正常,使用的是Exchange2013,上生产环境Exchange2016,部署后产生如下错误: Microsoft.Exchange.WebServices.Data.Serv ...
- Newtonsoft.Json 时区差解决方法
在使用Newtonsoft.Json时会遇到这样的问题,数据库存的值跟接收到反序列的值差了8个小时.这时,只要在反序列化时设置一下就可以了. JsonConvert.DeserializeObject ...
- Machine Learning/Introducing Logistic Function
Machine Learning/Introducing Logistic Function 打算写点关于Machine Learning的东西, 正好也在cnBlogs上新开了这个博客, 也就更新在 ...
- POJ 1873 The Fortified Forest
题意:是有n棵树,每棵的坐标,价值和长度已知,要砍掉若干根,用他们围住其他树,问损失价值最小的情况下又要长度足够围住其他树,砍掉哪些树.. 思路:先求要砍掉的哪些树,在求剩下的树求凸包,在判是否可行. ...