Linux C
细雪微凉
人间忽晚 山河已秋
展开
-
linux静态库 共享库
静态库 libxxx.a 共享库 libxxx.so一个程序有文件夹111,222,333, 编译出来的可执行文件叫app1。现在要将文件夹111编译成库。如果编译成lib111.a,那链接时该.a就会融合到app1中,app1就会变大。但是我对外只需要提供app1就行了,因为它已经把.a包含到其中了。如果编译成lib111.so,那么链接时该库并不会融合到iapp1,运行app1时必须到对应路径下去找lib111.so。也就是使用该方式我们对外需要提供app1和lib111.so,当然原创 2022-05-09 10:05:03 · 212 阅读 · 0 评论 -
去掉fgets拷贝的回车符
使用fgets(),如果缓冲区够大,就会把行尾的回车符 ‘\n’ 也拷入。那怎么快速去掉回车符 ‘\n’ 呢?用下面的函数。头文件:#inclued<string.h>strcspn()用来检索字符串s1开头连续有几个字符都不含字符串s2中的字符,其原型为:int strcspn(char *s1, char *s2);【参数说明】s1、s2为要进行查找的两个字符串。strcspn()从字符串s的开头计算连续的字符,而这些字符都完全不在字符串s2中。简单地说,若strcspn()返回的原创 2022-03-30 14:24:46 · 2053 阅读 · 0 评论 -
TCP_UDP网络编程
一.TCP1.TCP流程-服务器端》》socket类型:流式套接字SOCK_STREAM数据报套接字SOCK_DGRAM原始套接字SOCK_RAW》》IP地址的转换:in_addr_t inet_addr(const char *strptr);功能: 将strptr所指向的字符串转换成32位的网络字节序二进制值如 inet_addr(“192.168.7.135”);char * inet_ntoa(struct in_addr inaddr); //struct in_add原创 2021-11-23 21:50:41 · 480 阅读 · 0 评论 -
ftell函数
ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数,在随机方式存储文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。/***a.txt***/asdgsdertdfhjtew/***ftell.c***/#include<stdio.h>int main(){ FILE *p = fopen("./a.txt","rb"); fseek(p,2,SEEK_SET); char buf[100] = {0};转载 2021-11-10 11:24:27 · 131 阅读 · 0 评论 -
gcc分步编译
gccgcc file.c 如果没有错误,编译时生成一个可执行文件 a.out然后./a.out就输出了。./表示在当前目录下。要是不想生成a.out,比如想生成文件名叫test,就gcc file.c空格-o testgcc支持编译的一些源文件的后缀及其解释:.c c语言源代码.h 程序所包含的头文件.i 已经预处理过的C源代码文件 -E.s 汇编语言源代码文件 ..原创 2021-10-11 17:40:25 · 751 阅读 · 0 评论 -
fgets函数用法
注意一个问题:fgets的返回值指向的是缓冲区的地址,缓冲区的内容变了,fgets的返回值指向的内容自然就变了。例如:printf(“pget = %s\n”, pget);在调用fread函数之前和之后,printf打出的内容是不同的。...转载 2020-08-13 16:59:58 · 2370 阅读 · 0 评论 -
C语言字符数组清零
原创 2020-08-13 13:51:39 · 2568 阅读 · 0 评论 -
预处理define和defined
找不到出处是哪里了…#ifdef 和 #if defined 的区别在于,后者可以组成复杂的预编译条件,比如#if defined (AAA) && defined (BBB)xxxxxxxxx#endif#if defined (AAA) || VERSION > 12xxxxxxxxx#endif而#ifdef 就不能用上面的用法,也就是说,当你要判断单个宏是否定义时#ifdef 和 #if defined 效果是一样的,但是当你要判断复杂的条件时,只能用 #if原创 2020-06-15 13:35:56 · 298 阅读 · 0 评论 -
多级指针
例子1:int i= 10;int *p = &i;int **q = &p;int ***r = &q;int i= 10;int *p = &i;int **q = &p;int ***r = &q;printf("i = %d\n", ***r);例子2例子:工作中遇到的三级指针#include<std...原创 2020-03-30 17:14:04 · 144 阅读 · 0 评论 -
二维数组
概述int a[3][4];总共是12个元素,可以当成3行4列看待,分别是a[0][0] a[0][1] a[0][2] a[0][3]a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3]a[i][j] 表示第i+1行,j+1列的元素int a[m][n];该数组右下角最后一个元素是a[m-1][n-1]...原创 2019-06-11 15:15:56 · 13841 阅读 · 0 评论 -
linux内核list_splice函数 (拼接两个链表)
/*********************************拼接两个链表:1.如果新增的链表只有一个链表头就不做任何处理(因为链表头不包含数据)2. (head 2 3) + (add 5 6) ==> (head 5 6 2 3) //抛弃链表头add*********************************//* Join two lists. *...转载 2019-09-04 15:23:37 · 2429 阅读 · 0 评论