- 博客(14)
- 收藏
- 关注
原创 IDEA中Git使用
这通常是由于 GitHub 默认设置了主分支为 main,而你本地仓库的主分支是 master,因此它们的提交历史不同。这将会将远程 main 分支的提交合并到你的本地 main 分支。在这种情况下,应该将远程 main 分支合并到本地 main 分支,而不是尝试合并 master 分支。在这种情况下,main 分支和 origin/main 分支的提交历史看起来是不相关的,因此 Git 拒绝了合并操作。首先,确保你的本地仓库和远程仓库都有 main 分支,并且你的本地仓库中有最新的提交。
2024-03-13 20:27:26
763
2
原创 writen和readn解决流式套接字socket上的部分读和部分写的情况
这两个函数都是自定义的函数,通常会在底层调用read和write函数,但是会进行额外的处理,确保数据的完整性和可靠性。这是因为在网络通信中,数据传输往往是分片的,也就是说,发送方可能会将一个大的数据包分成多个小的数据包进行发送,而接收方可能需要多次接收这些小的数据包并组装成完整的数据包。函数readn()和writen()的参数与read()和write()相同,但是这两个函数使用的循环来重新启用这些系统调用,确保了请求的字节数总是能够全部得到运输(除非出现错误或者在read()中检测到了文件结尾符。
2023-06-26 22:52:08
562
3
原创 Linux网络编程——网络基础
1.IP:在Internet上,每一台通信实体(这个通信实体可以是路由器的某一端口,计算机和服务器等设备)都有唯一表示的IP地址,之前都是IPv4的但在2011年已经用尽,现在正向IPv6时代迈进2.端口:在设备上的唯一标识,范围在0–65535之间,编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。3.协议:为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
2023-06-08 19:42:26
207
2
原创 使用信号量实现生产者消费者模型
但是这时候互斥锁已经被消费者线程锁上了,所有生产者都被阻塞,到此为止,多余的线程都被阻塞了,程序产生了死锁。通过上面的代码可以知道,初始化信号量的时候没有消费者分配资源,消费者线程启动之后由于没有资源自然就被阻塞了,等生产者生产出产品之后,再给消费者分配资源,这样二者就可以配合着完成生产和消费流程了。通过测试代码可以得到如下结论:如果生产者和消费者使用的信号量总资源数为 1,那么不会出现生产者线程和消费者线程同时访问共享资源的情况,不管生产者和消费者线程有多少个,它们都是顺序执行的。
2023-05-30 21:52:57
319
2
原创 线程同步
当线程调用这个函数,并且 sem 中的资源数 >0,线程不会阻塞,线程会占用 sem 中的一个资源,因此资源数 - 1,直到 sem 中的资源数减为 0 时,资源被耗尽,线程被阻塞,当阻塞指定的时长之后,线程解除阻塞。当线程调用这个函数,并且 sem 中的资源数 >0,线程不会阻塞,线程会占用 sem 中的一个资源,因此资源数 - 1,直到 sem 中的资源数减为 0 时,资源被耗尽,但是线程不会被阻塞,直接返回错误号,因此可以在程序中添加判断分支,用于处理获取资源失败之后的情况。
2023-05-30 21:18:17
262
2
原创 线程
线程是轻量级的进程,在 Linux环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源,可以这样理解,进程是资源分配的最小单位,线程是操作系统调度执行的最小单位。1.线程更加节省系统资源,多个线程共用同一个地址空间。多个线程独享的是:自己的栈区,寄存器(内核中管理)共享的是:代码段,堆区,全局数据区,打开的文件(文件描述符)2.线程是程序的最小执行单位,进程是操作系统中的最小的资源分配单位。
2023-05-24 21:56:22
92
1
原创 友元 friend
生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,并不是所有人都可以进去但是呢,你也可以允许你的好朋友好闺蜜进去在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中的私有成员友元的关键字是:friend。
2023-05-08 21:55:45
88
原创 数据结构-串
是由零个或多个字符组成的有限序列,又名叫字符串。一般记为s=“a1a2······an”(n>=0) s是串的名称,双引号里面是串的值,注意引号不是串的内容,n称为串的长度。:零个字符的串,长度为0:只包含空格的串,可以不止一个空格,注意它与空串的区别:串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含字串的串称为主串子串在主串的就是子串的第一个字符在主串中的序号。
2023-04-10 18:32:04
1040
1
原创 编写myshell
把标准输出流给关闭了,然后紧接着创建的文件就会占用已关闭的标准输出流,使得本该流向显示器的数据流向了新创建的文件。dup()虽然可以完成重定向,但是使用起来也不是那么方便,因为它只能重定向未被使用的最小的文件描述符,对已有的文件不能完成重定向。fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。dup()返回的文件描述符重新指向了oldfd指向的文件,这个新的文件描述符是没有被使用的最小的文件描述符。
2023-04-02 18:29:47
310
1
原创 设计一个C语言的动态扩容缓冲区strbuf
/当前缓冲区(字符串)长度。int alloc;//当前缓冲区(字符串)容量。char *buf;//缓冲区(字符串)strbuf
2023-02-27 10:08:04
135
1
原创 西邮Linux兴趣小组2021纳新试题②
a,&a[0],&a[0][0]的地址相同,但是&a代表整个数组的地址,a是一个二维数组,&a[0]代表的是数组第一行的地址,&a[0][0]代表的是第一行第一个元素的地址。sizeof是运算符,计算的是你使用的操作数所占的空间字节大小,包括’\0’,而strlen是函数,计算的是字符串的长度,不包括’\0’。&a+1代表下一个数组的地址,&a[0]+1代表的是数组第二行的地址,&a[0][0]+1代表的是第一行第二个元素的地址。’的ASCII码是63,63+2=65就是A。
2022-11-20 11:50:37
296
2
原创 西邮Linux兴趣小组2021面试题
b[1] [1] =10那么此时b[1]指的是a的最后一行,是把最后一行的第二个数字值变为10;&a是指向a的整个数组,&a+1就是指向下一个数组。它只是改变了变量a,b的值,并没有传地址,仅仅是在函数体内部改变了a,b的值,相当于没有对a,b做任何操作,函数运行后a,b的值不会发生改变。*(ptr-1):是对整个数组的下一个数组-1,得到了上一个数组a的最后一个元素9。**(a+1):相当于a[1][0],代表的是数组a的第二行的首元素4。是运算符,计算的是你使用的操作数所占的空间字节大小,
2022-11-19 22:22:03
353
3
原创 西邮Linux兴趣小组2022年纳新面试题解析
大小端存储模式Xiyou Linux Group printf返回值嵌套 scanf返回值 结构体联合体 按位运算符 移位运算符,排序算法 宏定义
2022-11-19 10:14:06
1233
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人