背景:记录总结工作中经常会用到的函数
1、strtol()函数
【头文件】#include <stdlib.h>
【函数说明】strtol() 会将参数 str 字符串根据参数 base 来转换成长整型数(long)。
strtol() 会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。
long int strtol (const char* str, char** endptr, int base);
【参数说明】str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制, 范围从2 至36,或0。如 base=10 则采用10 进制,若base=16 则采用16 进制等。
2、tm数据结构
struct tm {
int tm_sec; /* 秒 - 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月)- 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /*夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};
3、memmove
【头文 件】:#include <string.h>
【函数说明】 内存进行移动
void * memmove ( void * destination, const void * source, size_t num );
【参数说明】
destination:指向要在其中复制内容的目标数组的指针,类型转换为 void* 类型的指针。
source:指向要复制的数据源的指针,类型转换为 const void* 类型的指针。
num :要复制的字节数。(size_t 是无符号整数类型)
返回值: 指向目标存储区 destination的指针。
4、ioctl
io设备控制函数(ctl),用于向设备发出控制命令或获取状态信息。
FIONBIO
是一个用于控制套接字非阻塞模式(也即线程不回因为还没返回而被阻塞)
5、select
select()函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。
参数解释
nfds
: 监视的文件描述符数量。通常是所有文件描述符中最大值加一。readfds
: 指向一个文件描述符集合,用于检查是否可以读取。writefds
: 指向一个文件描述符集合,用于检查是否可以写入。exceptfds
: 指向一个文件描述符集合,用于检查是否有异常条件。timeout
: 指向一个timeval
结构,指定等待的超时时间。如果为NULL
,则select
会一直阻塞直到某个文件描述符准备好。
返回值
- 返回准备好的文件描述符的数量。如果返回0,表示超时;如果返回-1,表示出错。
6、inet_ntop
网络地址结构转换,将ip格式地址转换为字符串
7、htons
将uint16_t代表的无符号整型转化为网络字符序(也即大端模式,高字节存于低地址),0x1234, 0x12存于低地址值,0x34存于高地址。
8、recv函数
recv
函数是用于从已连接的套接字接收数据的系统调用。它通常用于基于流的协议(如 TCP)。以下是 recv
函数的详细解释和示例。
size_t recv(int sockfd, void *buf, size_t len, int flags);
【参数说明】
sockfd
:一个已连接的套接字描述符。buf
:指向一个缓冲区,用于存储接收到的数据。len
:缓冲区的长度(即要接收的最大字节数)。flags
:用于指定不同的操作选项。常用的标志有:0
:默认,无特殊选项。MSG_DONTWAIT
:非阻塞模式,如果数据不可用则立即返回。MSG_PEEK
:查看数据而不从输入队列中移除它。MSG_WAITALL
:等待接收完整的数据(根据len
参数)。
9、字符串转double
的函数
atof // 无效字符串输出0.0 a代表ASCII, f代表float 为double和float混用
strtod // 提供了更详细的错误信息和剩余字符串处理能力
10、malloc
【函数说明】malloc函数可以从堆上获得指定n字节的内存空间
void * malloc(int n);
11、memset函数
void *memset(void *ptr, int value, size_t num);
【参数说明】:
ptr
:指向需要被设置的内存区域的指针。value
:需要设置的值,如果设置为0,则函数将内存区域清零。num
:要设置的字节数。- 函数返回指向内存区域的指针,即
ptr
。
12、calloc
【函数说明】calloc
会将分配的内存初始化为零。与 malloc
不同,calloc
会将分配的内存初始化为零,而 malloc
分配的内存中的内容是未定义的。
void *calloc(size_t num, size_t size);
【参数说明】
num
是要分配的元素个数。size
是每个元素的大小(以字节为单位)。
PS:
1、malloc:分配指定字节空间,未初始化
2、calloc:分配num*size字节空间,适合数组,且初始化为0
3、memset: 将空间按字节进行初始化位value
不定时更新…