自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (1)
  • 收藏
  • 关注

原创 vim编译过程

_FILE__ :文件名, __FUNCTION__:函数名,__LINE__:行数。头文件展开:gcc -E main.c -o main.i。

2024-04-01 10:32:22 151

原创 ipc。。。。

IPC 进程间通信 interprocess communicate。

2024-04-01 09:10:42 225

原创 链表队列LinkQueue

4. 若指完后,head所指为NULL,则把尾指针也置空。1. 生成一个新节点newnode,指针置空。3. 通过free 释放temp指针所指。2. 头指针和尾指针都指向新节点。1.先定义一个新节点,指针置空。2. head指针指向下一个。1. 定义一个temp指针。

2024-03-28 15:44:23 120

原创 信号量,sem_init/wait/post/destroy函数的使用

把tid号定义为全局变量,当票买到100张时,用pthread_cancel() 来结束其他两个子线程,并销毁三个信号量,该子线程直接由return结束。三个线程设置成pthread_detach(), 系统自动回收。信号量的初始化函数定义在线程创建之前,资源变量定义为全局变量。资源变量定义为全局变量,且申请的和释放的不是同一个资源。用信号量实现按顺序输出“hello”,“world”一开始只有一个写资源,没有读资源。通过初始化定义资源是否有来实现。

2024-03-28 14:17:06 230

原创 线程2,互斥锁pthread_mutex_init/lock/unlock/destroy/trylock函数的使用

加锁是锁公共资源的,只锁用到公共资源的那一部分代码。公共资源定义为全局变量,

2024-03-27 21:14:06 241

原创 给man手册配颜色

1. 终端输入sudo gedit /etc/bash.bashrc。再点右上角的save保存,保存完关闭。有提示信息不用管,重新再打开一个终端。2. 在文件末尾添加。

2024-03-27 14:54:15 182

原创 线程1,pthread_create/exit/join/cancel/detach/attr_init/attr_destroy/clean_push/cleanup_pop函数的使用

如果是主线程调用了 pthread_exit() ,表示主线程结束,但是,此时进程空间不销毁,直到所有的子线程都结束只有,此时进程空间销毁。若是子线程先结束,则反空指针,进程不退;若是主线程先结束,则调用 pthread_exit(),先退主线程,进程不退。创建线程失败时,返回的是错误码,但是没有设置,因此需要手动把返回值设置为 errno。若要看线程的持续效果,则进程不能结束,线程是存在进程中的。调度执行 --- 线程 (侧重执行任务)进程是分配资源和调度执行的基本单位。进程号是相等的,线程变成两个。

2024-03-27 12:11:38 287

原创 exec族

执行到execl 时,把execl 里的可执行程序的各个段(数据、堆栈...)替换掉本程序的a.out 实现镜像,因此不会打印出execl后面的语句。exec会在当前运行的程序中启动一个新的程序,会把当前进程的名字改掉,但是pid 号没变,父子关系还保留。路径要包含可执行程序文件名。只有错误时返回 -1。

2024-03-27 00:58:19 179

原创 进程2, wait, waitpid僵尸态收尸函数的使用

动态生成n 个子进程,并打印pid号(不能再while里面fork ,否则子进程也会fork,从而无限循环)函数名定义,用宏来表示__FUNCTION__当i= n 时,是父进程。

2024-03-26 19:25:43 192

原创 进程1,fork,getpid函数的使用

程序编译好后放在硬盘上(静态),运行时放在内存(进程,动态),一个程序可以对应n个进程,运行多次。程序 加载 到内存 运行起来 成为了 进程。pid号类似于人的身份证号 MEM:所占内存 TIME+:持续运行的时间。栈和堆是动态数据,程序运行后才会出现;静态数据是随着a.out 从硬盘移到内存中,编译完就存在的。PR、NI:优先级 RES:使用的资源。(堆 | 栈 | bss | data | text)命令:top---------类似于任务管理器。

2024-03-26 01:42:12 168

原创 opendir,readdir, closedir, stat函数的使用

判断模式,有两种方法:(1)mode与单个种类相&,不为0即为真 (2)mode与全1(即7)相&,判断是否等于想要的模式。对应00007 (用最后三位来代表others)判断wrx模式,单个相&,判断是否为0(法一)要准备一个放文件属性的结构体,并取其地址传入。法二:与全1相&,判断是否相等。文件编号(索引号):ino。ls功能,实现目录名显示。

2024-03-26 00:53:52 84

原创 实现ls -l 功能,index,rindex函数的使用

index第一次遇到字符c,rindex最后一次遇到字符c,返回值都是从那个位置开始往后的字符串地址。

2024-03-26 00:08:05 229

原创 软连接、硬链接

可以发现我们新建的hello2.c实质是我们hell1.c的快捷方式。并且他们的inode号不一样。由上面接口可以知道,我们新建的硬链接文件,只是给源文件起了一个别名,他们共用同一个inode号。

2024-03-25 21:42:05 210

原创 结构体、共用体

【代码】结构体、共用体。

2024-03-25 20:58:50 132

原创 c语言综合

开空间只开一次,只初始化一次,i 有静态生存期,(去掉static ,i就是具有动态生存期,调一次函数开一次空间)第一次调foo()结果为11,第二次调foo()结果为12。strcpy就是单个字符的替换,‘\0’就是0,可通过src[i] 来作为while的循环结束条件。字符串的选择排序,实际只循环一层,定义中间变量(一个字符数组,用其地址),用strcpy交换地址。字符串数组,只有行(字符串个数),输出时只要一层循环,打印地址。要改谁,就取地址谁,传参时传该变量的(基类型)的指针。

2024-03-19 00:14:27 867 1

原创 open, read, write, lseek, fileno, fdopen函数的使用

成功返回读到的数据个数 | 失败返回 -1 读到文件结尾返回0。c.设备文件 ---- 文件IO ///dev/video0 ----> fopen();//从头到尾的偏移量 就是文件大小。在创立空洞文件时,少写一步ftell,“”相当于空字符串‘\0’,但是不能直接写 ‘\0’,因为需要的是地址。write(准备写进去的文件描述符,已有数据的地址buf,要写的字符个数)read(从哪里读的文件描述符,要存放的地址buf,要读的字节个数)

2024-03-12 23:46:56 1533 1

原创 fread, fwrite, fseek, ftell, rewind函数的使用, 空洞文件的建立

当用fread输出字符串(用printf %s)时,要留最后一个位置给 ‘\0’ (改两个地方,元素个数-1和 a[ret] = '\0')个大小,最后一个偏移量的位置写入‘\0’,(光偏移不写入数据,则文件大小无变化)这样就创建好了相等大小的空洞文件。当用fwrite输出时,不能把一次写入的元素个数定死了,否则会剩余字节写不到,要用有效字符个数ret。当前位置偏移量------------------------------),存在文件偏移量,可先关闭文件再打开(方法一),先定位源文件末尾,用。

2024-03-12 00:59:00 376 1

原创 time,localtime函数,系统缓存

localtime 函数返回结构体指针类型,应用 -> 来表示结构体内的数据。time()的返回值传入localtime()从用户态到内核态是需要时间的。刷新用户空间的数据到系统。

2024-03-11 21:31:00 356

原创 tcp2。。

特点:用进程实现并发:要注意处理僵尸态。

2024-03-11 19:01:06 331

原创 fopen,fgets,fputs,fgetc,fprintf函数

r”只读,“r+”读写(光标定义在开头) , "w"只写(如果文件存在则截断为0, 不存在则创建,光标定义在开头),“w+”读和写(如果文件存在则截断为0, 不存在则创建,光标定义在开头),“a”在文件末尾写(如果文件不存在,创建文件),“a+”读和写(读的时候文件定位在开头,写的时候定位在末尾,文件不存在则被创建)把数据存入缓冲区s中,最多读size - 1个,输入的 ‘\n’ 也算读取的字符(ctrl + d也算读到结尾标志),自动到后面添 ‘\0’(第size个) ,

2024-03-07 01:45:41 1891 1

原创 标准IO--

I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/input。标准IO库,不单单是linux上有,在windows,Mac os上都有。一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,它是Mike Lesk编写的可移植I/O库的主要修改版本。令人惊讶的是,35年来,几乎没有对标准I/O库进行修改。C一部分,任何支持标准C的系统都可使用标准IO实现文件存储。(3).对系统调用进行了封装,内部对应的"文件描述符",1k, terminal,主要用于人机交互stdout。

2024-03-06 23:32:46 326 1

原创 TCP 2

如果是服务器则是accept的返回值新fd。3.listen //待机(监听) //监听socket。功能:从msg所在的内存中获取长度为len的数据以flags。如果是客户端则是sockfd的返回值旧fd。3.connect //拨打电话 【面向连接】4.accept //接听 【面向连接】功能:从指定的sockfd套接字中以flags方式获取长度。如果服务器则是accept的返回值的新fd。如果客户端则是socket的返回值旧fd。为len字节的数据到指定的buff内存中。

2024-03-06 19:46:24 322 1

原创 TCP高编

服务器是绑定,有两个socket,先是监听的,后是连接的。htonl 主机到网络 16位 2字节。

2024-03-06 00:31:43 332 1

原创 指针,数组

(2) 定义全局变量。(3)定义中间变量ret。解决办法:(1)static int i;6. 函数指针,存的是函数第一条指令在内存中的地址。返回空间地址首地址, 分配的内存空间一定是连续的。5. 不能返回局部变量的地址。3. 二维数组的翻转。

2024-02-04 19:52:44 346 1

原创 指针的应用

2. const是修饰p的 p = &i;错(p的地址值不能改变) *p = 100;1. 指针变量前加const,不能通过该指针去修改它所指的变量,下列语句的const是修饰*p的。对 *p = 100;错(*p的值不能改变)3. const int *const p 两个都不可以改。4. 用迭代器的方法进行选择排序。5. 用迭代器方法冒泡排序。7. 迭代器的方法表示函数。6. 用递归方法二分查找。

2024-02-03 22:07:27 337 1

原创 指针、数组

1. 指针是用来装地址的数据类型,装 int 型的就叫整形指针,装 double 型的叫浮点型指针。*叫指针运算符,结合方向自右向左,它的作用是通过指针找到所指的变量来进行访问,这种访问方式叫做间接。&i 装的是变量i所占4个字节的首地址,通过变量名i 来进行读写访问。p指针里面装的是整形变量的地址,变量有内存空间,其值可以改变。5. 64位系统下,指针是八字节的,32位系统下,指针是四字节的。(3)整体地将偏移好的那部分内存当做一个基类型变量来看。2. 每一个字节都有独特的编号,对应不同的地址。

2024-02-02 20:11:58 329

原创 变量存储及预处理命令

变量在主程序的第一条指令之前,变量的空间就开好,到程序的最后一条语句结束,变量才会被销毁。在寄存器上(CPU内部)开辟空间,不能&i,CPU内不能寻址。(4)在两个或多个具有包含关系的作用域中定义的同名标识符,外层标识符在内层不可见。6. 变量的生存期是指变量从诞生到销毁所经历的周期,其分为两类:静态生存期,动态生存期。5. 形参具有局部作用,不同的函数可以使用相同名字的变量,互不干扰。(2)动态生存期,伴随每次函数的调用,开空间,销毁空间。1.局部变量:定义在函数内部的变量,只在本函数范围内有效。

2024-02-01 22:33:22 363 1

原创 函数调用,数组

2. 例如 a和b两个数相加,a,b作为变量一定是在内存RAM当中,但是求和的操作是CPU做的,不 能在RAM内部进行数值相加,要先到CPU 内部,在CPU 内部有寄存器,用来存储数据,寄存器对数据读写的效率要远高于软件。3. 当把程序加载到内存当中去,CPU会引导主函数第一条语句开始执行,其有一个PC寄存器(程序计数器),在CPU内部,其本质上是一个指针,PC寄存器保存的是当前CPU正在执行的下一条指令 的地址。5. 栈区:函数调用时返回的地址,函数定义的所有局部变量,函数定义时给出的形参空间。

2024-01-31 22:27:41 342

原创 字符二维数组及函数的调用

13. 驼峰命名: 除了第一个字母小写,后面的单词字母大写。9.在写代码时,要提高代码的复用性,降低程序的耦合性。10. 如果没有返回类型,则默认返回int。3. 输出字符串二位数组中的最大字符串。把a[i]当做标识符,进行每行的逆序。5. 选择法给字符串二维数组排序。在不同函数中,有同名变量也没关系。定义函数时要用类型标识符。(2)用自己定义的函数。11. int不能转void。4. 字符串二维数组的逆序。7. 无参函数的一般形式。1. 二维数组的逆序。8. 主要有两种函数。

2024-01-30 21:19:04 352

原创 字符型数组

例 fgets(s, sizeof(s), stdin);14. int a[3][4]={{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}} 里面的括号可以不写,本质上是有3个元 素,每个元素里有一维数组。9. char *strcpy (char *dest, const char *src) 将后者(源s2)拷贝到前者(目标s1),被拷贝的 数组长度至少是strlen(s1) + 1。

2024-01-29 21:16:54 339

原创 一维数组学习

int 是若干个数据类型的统一 ,唯独不能是空类型,空类型不能创造任何变量。(2)有序性, 下标实际上是偏移量,随着下标增大,其变量的地址值夜增大。8. 初始化时, a[10] = {1, 2, 3}, 未被赋值的变量都自动赋值0。原来:4, 2, 1, 3 现在:1, 2, 3, 4。原来:1, 2, 3 , 4 现在:4, 3, 2, 1。(1)单一性, 数组中所有数据所占的字节大小是相等的。这是所有变量的首地址,是系统分配的常量,不能被指定。

2024-01-29 00:11:17 375

原创 C语言循环语句

sum += i,++i )顺序表达式,自左向右,先执行左边的sum += i,再执行++i。1是循环变量的初始化,2是循环执行的条件,3是使循环体趋于结束的语句。1. 关系运算(>=, ==,!=)符的优先级高于逻辑运算符(&&,||)若省略2,则代表恒为真,等价于while(1){},进入死循环。末尾的分号相当于{},因此不能留;(1)有循环变量的初始化语句(否则变量会随机赋值)6. 当循环结束时,变量的值是初次为假的值。(3)使循环趋于结束的语句。2. (a)等价于(a!(2)循环的执行条件。

2024-01-26 20:44:37 326

原创 2024.01.25 C语言学习

case 10: 等值比较,case之后的只能是常量。double pow (double x, double y) 乘方。(1)用中间变量,把其中一个变量存入中间变量中,再进行赋值交换。(2)利用 x+=y;11. && 和 || 具有截断功能,其中&&的优先级更高。a)等价于 if (i == 0)13. 写代码要注意高内聚,低耦合(算法尽量分开)8. 关系运算符,在同等优先级,自左向右。

2024-01-25 20:43:58 333

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除