C语言常用函数
路漫漫其远,吾求索
晓看天色暮看云
展开
-
strsep()函数:字符串切割
用来分解字符串为一组字符串1,头文件:#include <string.h>2,函数原型:char *strsep(char **s, const char *delim);3,函数参数:s为要分解的字符串,delim为分隔符字符串。4,返回值:从s开头开始的一个个子串,当没有分割的子串时返回NULL。5,事例:#include <stdio.h>#include <string.h> int main(void) { char sourc原创 2021-10-22 14:33:52 · 1275 阅读 · 0 评论 -
strrev(): 将字符串中的所有字符颠倒次序排列
1,头文件:#include <string.h>2,函数原型:char *strrev(char *s)3,函数参数:要逆序的字符串4,返回值:指向s的指针事例:#include<string.h> #include<stdio.h> int main() { char forward[]="string"; //原文中定义为char*是不对的,指向代码段的指针内容是不可变的 printf("Before strrev():%s",fo原创 2021-10-21 15:31:05 · 215 阅读 · 0 评论 -
strcspn(const char *str1, const char *str2) 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
1,头文件:#include <string.h>2,函数原型:size_t strcspn(const char *str1, const char *str2)3,函数参数:str1 – 要被检索的 C 字符串。str2 – 该字符串包含了要在 str1 中进行匹配的字符列表。4,返回值:该函数返回 str1 开头连续都不含字符串 str2 中字符的字符数。5,事例:#include<stdio.h>#include<string.h>in原创 2021-10-21 15:04:38 · 78 阅读 · 0 评论 -
strpbrk(const char *str1, const char *str2):检索字符串 str1 中第一个匹配字符串 str2 中字符的字符
1,头文件:#include <string.h>2,函数原型:char *strpbrk(const char *str1, const char *str2)3,函数参数:str1 – 要被检索的 C 字符串。str2 – 该字符串包含了要在 str1 中进行匹配的字符列表。4,返回值:该函数返回 str1 中第一个匹配字符串 str2 中字符的字符数,如果未找到字符则返回 NULL。5,事例:#include <stdio.h>#include <原创 2021-10-21 14:58:20 · 145 阅读 · 0 评论 -
strdup:字符串拷贝函数
1,头文件:#include <string.h> 2,函数原型:char *strdup(const char *s) 3,函数参数:待拷贝的源字符串4,返回值:成功返回拷贝后的字符串5,事例:#include <stdio.h> #include <string.h> #include <alloc.h> int main() { char *dup_str, *string="hello"; dup_str=st原创 2021-10-21 14:47:59 · 208 阅读 · 0 评论 -
getcwd()函数:取得当前的工作目录
1,头文件:#include <unistd.h>2,函数定义:char * getcwd(char * buf, size_t size);3,函数参数:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。4,返回值:执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno.5,事例:#include <unistd.h>main(原创 2021-10-20 16:17:47 · 1707 阅读 · 0 评论 -
shmget()函数:
得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符1,头文件:#include <sys/ipc.h>#include <sys/shm.h>2,函数原型:int shmget( key_t, size_t, flag);3,函数参数:4,返回值:成功:返回共享内存的标识符,失败返回-1,错误原因存于errno中错误代码:EINVAL:参数size小于SHMMIN或大于SHMMAXEEXIST:预建立key所指的共享内存,但已经存在EIDRM原创 2021-10-19 16:46:55 · 4243 阅读 · 0 评论 -
ftok()函数
系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。1,头文件:#include <sys/types.h>#include <sys/ipc.h>2,函数原型:key_t ftok( char * fname, int id )3,返回值:成功返回一个key_t值,失败返回-1在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16原创 2021-10-19 16:40:01 · 594 阅读 · 0 评论 -
C语言中的%d、%u、%p、%f、%lu...
%d 十进制有符号整数%u 十进制无符号整数%f 浮点数%s 字符串%c 单个字符%p 指针的值%e 指数形式的浮点数%x, %X 无符号以十六进制表示的整数%o 无符号以八进制表示的整数%g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出%p 输出地址符%lu 32位无符号整数%llu 64位无符号整数%2f是把float的所有位数输出2位,包括小数点,如果不组2位,补0,如果超过2位,按照实际输出%.2f是float后的小数只输出两位。%d=int%ld=原创 2021-10-19 15:09:31 · 15484 阅读 · 1 评论 -
size_t理解
size_t在C语言中就有了。它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。类似的还有wchar_t, ptrdiff_t。wchar_t就是wide char原创 2021-10-19 14:58:06 · 121 阅读 · 0 评论 -
fsync()函数:将缓冲区数据写回磁盘
1,头文件:#include <unistd.h>2,函数原型:int fsync(int fd);3,函数说明:负责将参数fd 所指的文件数据, 由系统缓冲区写回磁盘, 以确保数据同步4, 返回值:成功返回0,失败返回-1,errno为错误代码...原创 2021-10-12 17:11:43 · 887 阅读 · 0 评论 -
system()函数:执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令
1,头文件:#include <stdlib.h>2,函数原型:int system(const char * command)3,函数功能:执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。说明:在windows系统中,system函数直接在控制台调用一个command命令。在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程原创 2021-10-12 15:36:56 · 477 阅读 · 0 评论 -
pthread_attr_setstacksize:改变线程堆栈大小
1,简介pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下:ulimit -s上述表示为8M;单位为KB。也可以通过# ulimit -a 其中 stack size 项也表示堆栈大小。ulimit -s value 用来重新设置stack 大小。一般来说 默认堆栈大小为 8388608; 堆栈最小为 16384 。 单位为字节。堆栈最小值定义为 PTHREAD_STACK_MIN ,包含#include <limits.h>原创 2021-10-08 16:15:36 · 4937 阅读 · 0 评论 -
select函数(正常使用/实现精准定时器)
1,select:正常使用轮询的方式,从多个文件描述符中获取状态变化后的情况。头文件:#include <sys/time.h> //for struct timeval#include <unistd.h> //for select函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);参数:nfd原创 2021-10-08 15:05:49 · 1080 阅读 · 0 评论 -
strrchr():查找最后一次出现字符 c 的位置
参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。1,头文件:#include <string.h>2,声明:char *strrchr(const char *str, int c)3,参数:str – C 字符串。c – 要搜索的字符。以 int 形式传递,但是最终会转换回 char 形式。4,返回值:成功返回 str 中最后一次出现字符 c 的位置。失败返回一个空指针。5,事例:#include <stdio.h>#in原创 2021-09-29 18:45:41 · 1397 阅读 · 0 评论 -
isdigit()判断一个字符是否是十进制数字
用来检测一个字符是否是十进制数字十进制数字包括:0 1 2 3 4 5 6 7 8 91,头文件:#include <stdio.h>#include <stdlib.h>#include <ctype.h>2,参数要检测的字符。它可以是一个有效的字符(被转换为 int 类型),也可以是 EOF(表示无效的字符)。3,返回值返回值为非零(真)表示c是十进制数字,返回值为零(假)表示c不是十进制数字事例:#include <stdio.h>原创 2021-09-29 17:00:22 · 808 阅读 · 0 评论 -
__FILE__,__func__,__LINE__实用的调试信息
FILE:当前源文件的名字func:当前源文件中的函数名LINE:当前代码的行号事例:#include <stdio.h>void test(){ printf("test:FILE = %s func = %s LINE = %d\n",__FILE__,__func__,__LINE__);}int main(){ test(); printf("main:FILE = %s func = %s LINE = %d\n",_原创 2021-09-29 15:13:30 · 265 阅读 · 0 评论 -
dirent.h使用详解
Linux下遍历目录的方法,打开目录,读取目录,关闭目录opendir -> readdir -> closedir函数原型:#include <dirent.h>DIR *opendir(const char *dirname);struct dirent *readdir(DIR *dirp);int closedir(DIR *dirp);opendir用于打开目录,是类似于流的那种方式,返回一个指向DIR结构体的指针,参数*dirname是一个字符数组或者字符原创 2021-09-28 11:00:14 · 1504 阅读 · 0 评论 -
_iobuf结构体成员的含义
struct _iobuf {char *_ptr; //文件输入的下一个位置int _cnt; //当前缓冲区的相对位置char *_base; //指基础位置(应该是文件的其始位置)int _flag; //文件标志int _file; //文件的有效性验证int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取int _bufsiz; //文件的大小char *_tmpfname;//临时文件名};typedef struct _iobuf FILE;...原创 2021-09-23 14:16:29 · 1165 阅读 · 0 评论 -
struct sockaddr 和 struct sockaddr_in处理网络通信的地址
一,sockaddr1,头文件:#include <sys/socket.h>sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下:2,结构体:struct sockaddr{ unsigned short sa_family;//2字节,地址族,AF_xxx char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息 };二:sockaddr_in1,头文件:#include<netinet/in.h>原创 2021-09-22 19:04:52 · 536 阅读 · 0 评论 -
inet_ntoa()函数:将网络二进制的数字转换成网络地址
1,头文件:#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>2,函数定义:char * inet_ntoa(struct in_addr in);3,函数说明:inet_ntoa()用来将参数in 所指的网络二进制的数字转换成网络地址, 然后将指向此网络地址字符串的指针返回.4,返回值:成功则返回字符串指针, 失败则返回NULL....原创 2021-09-22 18:55:32 · 511 阅读 · 0 评论 -
struct ifaddrs 与getifaddrs()函数
1,struct ifaddrs结构体:struct ifaddrs{ struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* A原创 2021-09-22 17:44:35 · 3473 阅读 · 0 评论 -
cat /proc/cpuinfo (查看CPU信息)
基于不同指令集(ISA)的CPU产生的/proc/cpuinfo文件不一样,基于X86指令集CPU的/proc/cpuinfo文件包含如下内容:processor : 0vendor_id :GenuineIntelcpu family :6model :26model name :Intel® Xeon® CPU E5520 @ 2.27GHzstepping :5cpu MHz :1600.000cache size : 8192 KBp原创 2021-09-22 17:16:22 · 4423 阅读 · 0 评论 -
sysinfo函数、结构体使用
1,头文件:#include <sys/sysinfo.h>2,函数声明:int sysinfo(struct sysinfo *info);3,返回值:成功返回0,错误返回-1;4,sysinfo结构体名称Linux 2.3.23(i386), 2.3.48 (all architectures):(具体版本具体查看)struct sysinfo { long uptime; /* 启动到现在经过的时间 */ unsigned lo原创 2021-09-22 17:03:13 · 2011 阅读 · 0 评论 -
utsname 函数使用说明
1,头文件:#include <sys/utsname.h>2,函数说明:extern int uname (struct utsname *__name) __THROW;3,函数参数__name:指向存放系统信息的缓冲区,4,struct utsname结构体struct utsname { char sysname[_UTSNAME_SYSNAME_LENGTH];//当前操作系统名 char nodename[_UTSNAME_NODENAME_LENGTH]原创 2021-09-22 16:21:18 · 1829 阅读 · 0 评论 -
gettimeofday()函数:获取当前时间
一:头文件:#include <sys/time.h> #include <unistd.h>二:函数定义:int gettimeofday (struct timeval * tv, struct timezone * tz);三:函数说明:gettimeofday()会把目前的时间有tv 所指的结构返回,当地时区的信息则放到tz 所指的结构中。四:函数参数:timeval 定义:struct timeval{ long tv_sec; //秒原创 2021-09-17 16:56:40 · 2015 阅读 · 0 评论 -
struct timeval结构体
一:所需文件:#include <time.h>#include <sys/time.h>二:结构体说明struct timeval{__time_t tv_sec; /* Seconds. */__suseconds_t tv_usec; /* Microseconds. */};三:使用说明:tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒数,四:事例:#include <sys/time.原创 2021-09-17 16:26:06 · 744 阅读 · 0 评论 -
C语言中string函数详解
https://blog.csdn.net/sunnylgz/article/details/6677103原创 2021-09-13 14:33:27 · 999 阅读 · 0 评论 -
Winpcap常用函数解析
*一:int pcap_findalldevs(pcap_if_t , char )说明:用来获得网卡的列表参数:指向pcap_if_t类型的列表的指针的指针; char型指针,当打开列表错误时返回错误信息返回值:为int型,当显示列表失败时返回-1pcap_if结构体如下:struct pcap_if{ struct pcap_if *next; char *name; char *des原创 2021-09-09 19:25:05 · 2026 阅读 · 0 评论 -
struct epoll_event:用于注册所感兴趣的事件和回传所发生待处理的事件
1,结构体: typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t;//保存触发事件的某个文件描述符相关的数据struct epoll_event { __uint32_t events; /* epoll event */ epoll_data_t原创 2021-09-09 11:14:27 · 1190 阅读 · 0 评论 -
__attribute__((unused)) 的含义
在C程序中,如果定义了一个静态函数,而没有去使用,编译时会有一个告警:代码:#include <stdio.h>int main(void){ printf("main\n");}static void a(void){ printf("a\n");}运行:$ gcc a.c -Walla.c:8:13: warning: ‘a’ defined but not used [-Wunused-function]static void a(void)原创 2021-09-08 19:14:18 · 858 阅读 · 0 评论 -
C语言实现Base64编码/解码
Bse64是一种以64个可打印字符对二进制数据进行编码的编码算法。base64在对数据进行编码时以三个8位字符型数据为一组,取这三个字符型数据的ASCII码,然后以6位为一组组成4个新的数据,这4个新的数据有6位,所以它的最大值为2^6=64。我们以4个6位数据的十进制数从base64表中得到最终编码后的字符。Base64 编码表由于base64编码是将编码前的3*8位数据,分解成4个6位的数据,所以经过base64编码后的字符串长度是4的倍数。但往往我们进行编码的数据长度并不是3的倍数,这就造成了“原创 2021-09-07 17:30:49 · 494 阅读 · 0 评论 -
C语言中的非阻塞(O_NONBLOCK)
非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。对于一个给定的描述符两种方法对其指定非阻塞I/O:(1)调用open获得描述符,并指定O_NONBLOCK标志(2)对已经打开的文件描述符,调用fcntl,打开O_NONBLOCK文件状态标志。flags = fcntl( s, F_GETFL, 0 ) )fcntl( s, F_SETFL, flags | O_NONBLOCK )...原创 2021-09-06 18:35:53 · 3055 阅读 · 0 评论 -
linux中的sysconf系统调用
man一下sysconf,可以看一下这个函数的一些基本信息man 3 sysconf写一个简单的测试程序#include <stdio.h>#include <unistd.h>#define ONE_MB (1024 * 1024)int main(){ printf("The number of processors configured is :%ld\n", sysconf(_SC_NPROCESSORS_CONF)); p原创 2021-09-06 10:29:04 · 246 阅读 · 0 评论 -
statfs:查询文件系统相关的信息。
1,头文件:#include <sys/vfs.h>#include <sys/statfs.h>2,函数声明: int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf);3,函数参数:path: 需要查询信息的文件系统的文件路径名。fd: 需要查询信息的文件系统的文件描述词。buf:以下结构体的指针变量,用于储存文件系统相关的原创 2021-09-03 17:35:59 · 411 阅读 · 0 评论 -
mntent:获取挂载设备
结构体:struct mntent { char *mnt_fsname; /* 文件系统对应的设备路径或者服务器地址 */ char *mnt_dir; /* 文件系统挂载到的系统路径 */ char *mnt_type; /* 文件系统类型: ufs, nfs, 等 */ char *mnt_opts; /* 文件系统挂载参数,以逗号分隔 */ int mnt原创 2021-09-03 17:31:18 · 136 阅读 · 0 评论 -
epoll_ctl()对文件描述符epfd引用的epoll实例执行控制操作
1,头文件:#include <sys / epoll.h>2,函数声明:int epoll_ctl(int epfd,int op,int fd,struct epoll_event * event);3,函数说明:该系统调用对文件描述符epfd引用的epoll实例执行控制操作。它要求操作op对目标文件描述符fd执行。op参数的有效值为: EPOLL_CTL_ADD:在文件描述符epfd所引用的epoll实例上注册目标文件描述符fd,并将事件事件与内部文件链接到fd。原创 2021-09-03 14:20:08 · 413 阅读 · 0 评论 -
共享内存函数(shmget、shmat、shmdt、shmctl)
一:shmget函数:得到一个共享内存标识符或创建一个共享内存对象1,头文件:#include <sys/ipc.h>#include <sys/shm.h>2,函数说明:得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符3,函数原型:int shmget(key_t key, size_t size, int shmflg)4,函数参数:key:0(IPC_PRIVATE):会建立新共享内存对象大于0的32位整数:视参数shmflg来确定操作原创 2021-09-03 11:04:05 · 1500 阅读 · 0 评论 -
chown()函数:改变文件所有者
1,头文件:#include <sys/types.h> #include <unistd.h>2,函数声明:int chown(const char * path, uid_t owner, gid_t group);3,返回值:成功则返回0, 失败返回-1, 错误原因存于errno.4,函数说明:chown()会将参数path 指定文件的所有者变更为参数owner 代表的用户,而将该文件的组变更为参数group 组。如果参数owner 或group 为-1原创 2021-09-02 15:31:47 · 1244 阅读 · 0 评论 -
getgrnam()函数:从组文件中取得指定组的数据
1,头文件:#include <grp.h> #include <sys/types.h>2,函数定义:strcut group * getgrnam(const char * name);3,函数说明:getgrnam()用来逐一搜索参数那么指定的组名称, 找到时便将该组的数据以group 结构返回4,返回值:返回 group 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生.5,事例:/* 取得adm 的组数据 */#include &原创 2021-09-02 15:17:43 · 584 阅读 · 0 评论