Linux
文章平均质量分 69
神厨小福贵!
C/C++/Linux
展开
-
简单的HTTP服务器程序的编写
HTTP 协议一般指 HTTP(超文本传输协议)。超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的万维网文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(我们要传输的数据是HTTP报文,报文是通过TCP协议来传输的)下面来看这么一个题,当你在浏览器输入www.baidu.com,按下回车之后会发生哪些事情?当你在.原创 2022-02-10 21:50:19 · 2661 阅读 · 2 评论 -
UDP通信协议详解
中文名 用户数据报协议 英文名 User Datagram Protocol 基础 IP数据包服务上增加一点功能 类别 传输层协议 特点 无连接、不可靠、快速传输 用途 发送IP数据包 如右图所所示为udp协议的基本信息UDP(User Datagram Protocol)用户数据报协议,非连接的协议,传输数据之前源...原创 2022-02-09 21:45:29 · 5170 阅读 · 0 评论 -
TCP的协议特点(对于《Linux高性能服务器编程》的部分摘录以及自己的部分见解)
一.TCP协议特点为面向连接、字节流和可靠传输面向连接:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。字节流:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这就是字节流的概念﹔应用程序对数据的发送和接收是没有边界限制的。TCP先将数据存放于发送缓冲区中,等待,等待发送数据的原创 2022-02-08 23:30:10 · 1172 阅读 · 0 评论 -
TCP协议的服务器与客户端的程序设计(代码注释超详细)
在上篇博客中讲到了三次握手和四次挥手:Linux网络编程--TCP中的三次握手和四次挥手_神厨小福贵!的博客-CSDN博客服务器编程和客户端编程的大致流程如下:三次握手是在客户端中的connect中完成的,具体如下:那么上述说到的SYN ACK这些是什么东西呢?上述的截图取自《Linux高性能服务器编程》电子版的截图!+根据书中所提到的在客户端对服务器端connect的时候,由客户端对服务器端发出一个SYN的请求连接的报文,值为i是32位序列号,然后服务器收到客户端SYN之后,会反馈给客户端一个自身服务原创 2022-01-06 23:07:10 · 8003 阅读 · 1 评论 -
Linux网络编程--TCP中的三次握手和四次挥手
服务器编程和客户端编程的大致流程如下:三次握手是在客户端中的connect中完成的,具体如下:那么上述说到的SYN ACK这些是什么东西呢?上述的截图取自《Linux高性能服务器编程》电子版的截图!+根据书中所提到的在客户端对服务器端connect的时候,由客户端对服务器端发出一个SYN的请求连接的报文,值为i是32位序列号,然后服务器收到客户端SYN之后,会反馈给客户端一个自身服务器端的SYN报文和确认号报文ACK,其中ACK的值为客户端和服务器端的SYN序...原创 2022-01-02 20:23:31 · 1107 阅读 · 0 评论 -
【Linux】多线程中使用fork()
上述代码中整体的逻辑 我来给大家理一下,先开始是主线程创建了子线程,然后子线程中啥也不干,加锁----输出fun lock------睡眠五秒钟------解锁-----输出fun unlock等不到子线程执行完,主线程又执行了fork命令,将主线程复制一份到子进程中,这会的主线程也充当了子进程的父进程,因为所有线程共享一把锁,这会子线程中的锁还在枷锁状态中,所以子进程中也就被fork将锁的加锁状态锁给复制到了子进程中,这时候到了子进程中的时候,子进程首先打印出child will lock 然后原创 2021-12-11 22:27:12 · 1860 阅读 · 2 评论 -
Linux多线程同步------条件变量
先来看下《Linux高性能服务器编程》中对条件变量的描述:上述话可以总结为: 多线程中某一个线程依赖于另外一个线程对共享数据的改变时,就可以使用条件变量!用消费者生产者的来理解条件变量的话,就很好理解了取自于:条件变量基本概念和原理_相信并热爱着的技术博客_51CTO博客_条件变量_条件变量原理上述这位大哥说到的,在消费者生产者角度来解释这个东西,就可以看的很透彻了,需要时唤醒,不需要时,就进行睡眠。下面来看一下条件变量会用到的函数以及头文件:#include ...原创 2021-12-06 10:15:00 · 306 阅读 · 0 评论 -
Linux多线程的同步------读写锁
前面介绍过Linux多线程同步的另外两个方法------互斥锁和信号量Linux多线程的同步-----信号量和互斥锁_神厨小福贵!的博客-CSDN博客下面来看一下读写锁: 读写锁和互斥锁都带有一个锁,那么他们有什么区别呢? 读写锁:读写锁 互斥锁 多个读操作可以同时进行 一次只有一个线程拥有互斥锁,其他线程只有等待 写操作之间必须互斥 读写操作之间也是互斥的,且写操作的应优先于读操作(写操作执行的时候,其他函数都在阻塞) 上面说...原创 2021-12-05 18:38:24 · 1729 阅读 · 0 评论 -
线程安全之strtok()函数
先来看下线程安全的概念:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。通俗来讲,就是当多线程运行的时候,运行结果和你预想的结果有一定的偏差的话,就会造成线程安全的问题。先来看下面一段代码:它的代码实现的功能是主线程创建一个子线程,主线程对abc分隔打印,子线程对123进行分割打印,当让对于子线程和主线程并发执行,所以最后打印结果可能会有交叉...原创 2021-11-28 12:08:31 · 3212 阅读 · 0 评论 -
Linux信号量与互斥锁解决生产者与消费者问题
先来看什么是生产者消费者问题:生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据原创 2021-11-27 20:16:15 · 2485 阅读 · 0 评论 -
Linux多线程的同步-----信号量和互斥锁
前面两篇给基本概念讲过了,大家有兴趣的可以去看一下:Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地址空间,线程共享进程中的地址空间进程的创建消耗资源大,线程的创建相对较小进程的切换开销大,线程的切换开销相对较小进程:程序执行的过程叫进程。线程:进程内部的一条执行序列或执行路径,一个进程可以包含多条线程(多线程)!每个进程最少有一个线程,例如下面代码:#include <stdio.h>int ma原创 2021-11-24 22:21:32 · 915 阅读 · 0 评论 -
Linux多线程的进阶理解
首先来看在Linux中如何实现多线程的,下面是《Linux内核设计与实现第三版》中扫描页的截图:这段话我冒昧的解析一下,如有不当,欢迎指出,大家共同进步!在Linux中线程和进程没有任何区别(站在内核角度来看),每个线程属于自己的task_struct,task_struct相当于在进程中的PCB(进程描述符),每创建一个新的进程就有一个新的进程描述符,在内核中线程看起来就是普通的进程,但是这个进程和它的主线程(在内核看来就是主进程)共享一块内存地址,同一个进程描述符!下面来看一段代码.原创 2021-11-24 20:18:20 · 485 阅读 · 0 评论 -
Linux多线程
进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地址空间,线程共享进程中的地址空间进程的创建消耗资源大,线程的创建相对较小进程的切换开销大,线程的切换开销相对较小进程:程序执行的过程叫进程。线程:进程内部的一条执行序列或执行路径,一个进程可以包含多条线程(多线程)!每个进程最少有一个线程,例如下面代码:#include <stdio.h>int main(){ return 0;} ...原创 2021-11-21 23:57:16 · 1518 阅读 · 1 评论 -
Linux进程间通信(IPC)-------消息队列
消息队列是进程间通信的一种方法,他有两个操作,一个进程来发送消息(也就是向内存中写入数据),另一个是获取消息(也就是另外一个进程在内存中读取数据)下面来看消息队列的创建,写入,读取等需要用到的函数创建:msgget((key_t) key,int msgflg) 其中(key_t)key的话,我在管道,共享内存中都写过,key值没什么要求,大于零的32位整数就行,并且它是用来区分和别的消息队列的,所以key值别和其他消息队列重复就行msgflg是个标志位,一般取IPC_CR...原创 2021-11-20 21:39:26 · 828 阅读 · 0 评论 -
Linux阶段复习题
前台晚上考的Linux阶段性复习题,考的有些个烂,被老师提出去训了一顿,确实还是基础不行啊,今天把这个题拿出来与大家分享一下,希望对大家有帮助,都会附有答案和讲解,也说明了Linux中,基础很重要,我比较注重实操代码,后面的代码题,都还是没问题的,就是前面的理论有些个烂,加油,兄弟们!第一阶段复习考试题(问答题)每题3分1、简述如下目录的功能(这些是重要的,必须掌握的,其他的目录作为了解就好)/boot 开机引导目录/etc 配置文件目录/lib 存放库文件/bin 普通用户可执行的指令/ho原创 2021-11-16 13:42:38 · 1210 阅读 · 0 评论 -
Linux进程间的通信----->共享内存
共享内存:顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。(取自博客一位大哥-->Linux进程间通信——使用共享内存...原创 2021-11-13 11:54:28 · 1215 阅读 · 0 评论 -
Linux编程题:信号量同步三进程依次打印若干次ABC
三个进程依次打印ABC.....思路及大致流程如下:思路取自这位大哥:Linux编程题:创建3个线程分别打印abc,用信号量进行同步_cleverlemon的博客-CSDN博客这位大哥写的是线程,不需要自己封装sem那些初始化函数,pv操作函数以及销毁函数,这篇写的是多进程,麻烦一些,大致思路一毛一样来看代码实现:先来对sem所需的初始化函数,pv操作函数,销毁函数进行封装:sem.h#include <stdio.h>#include <stdl.原创 2021-11-09 11:37:32 · 1657 阅读 · 4 评论 -
Linux下进程间通信-------管道通信
先来看原理:特点 :1.半双工的通信方式(通信期间双方都可以发送/接收文件,但是不能双方同时发送/接收数据)2.pipe只能用于父子进程间的通信3.mkfifo可用于任意进程间的通信代码逐步实现首先创建管道文件:然后ls查看是否创建(因为我提前都写过了,所有文件夹中写端和读端都有了)然后进行读端的编写:...原创 2021-11-09 09:47:37 · 805 阅读 · 0 评论 -
Linux终端实现自己的命令解释器----mybash
首先我们得知道Linux下产生新进程的过程是--->先复制---->再替换子进程(fork + exec)原创 2021-10-31 18:12:33 · 503 阅读 · 0 评论 -
Linux终端C语言实现图片拷贝
我们正常的图片复制就很简单 右键复制 然后粘贴就好了 今天在LInux终端使用c语言对照片进行拷贝首先得知道一点 图片其实是由二进制0101组成的 如下图的照片二哈.jpeg然后进行代码实现:...原创 2021-10-23 18:07:37 · 1919 阅读 · 0 评论 -
fork() || fork() || fork() 与 fork() && fork() && fork()
先来看fork() || fork() || fork()#include<stdio.h>#include<unistd.h>#include<assert.h>int main(){ fork() || fork() || fork(); printf("A\n");}//这个输出多少个A呢首先主进程fork() || fork() || fork();最左边的fork()给个返回值 这个返回值是子进程的进程ID 这个I..原创 2021-10-17 19:29:26 · 907 阅读 · 0 评论 -
关于fork的题
先来看一道题#include<stdio.h>#include<unistd.h>#include<assert.h>int main(){ for(int i = 0 ; i < 2 ; i++) { fork(); printf("A\n"); } exit(0);}//这个输出多少个A呢答案是输出六个A 看解析这个题就有意思了#include&...原创 2021-10-17 18:52:40 · 164 阅读 · 0 评论 -
Linux配置vim使得代码缩进
写的非常棒:配置Linux下vim自动缩进等功能_Alex_15的博客-CSDN博客原创 2021-10-16 23:43:00 · 380 阅读 · 0 评论 -
fork函数
fork在英语中的意思就是分裂的意思 Linux命令中就是复制进程的作用在Linux中 它被包含在在<unistd.h>头文件中特点:fork分裂之后的多进程之间互不干涉占用同一块虚拟内存pid_t pid = fork()这句话的意思就是说fork()函数的返回值是pid_t 类型的 在父进程中pid的值是子进程的进程标识 在子进程中的pid的值是0下面一段代码验证上述:...原创 2021-10-16 19:39:56 · 1442 阅读 · 0 评论 -
Linxu终端gcc与gcc -c的区别
gcc的更多用法详见下链接: GCC 参数详解 | 菜鸟教程gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步: 1、预处理,生成 .i 的文件[预处理器cpp] 2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs] 3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as] 4、连接目标代码, 生成可执行程序 [链接器ld] 参数详解 -x language filename 设定..https:/...原创 2021-10-04 12:00:31 · 445 阅读 · 0 评论 -
Linux上运行一个c程序
b站的视频链接:Linux上面运行一个c程序应该怎么做呢1.先在终端创建一个c程序vim hello.c输入上行代码之后 会弹出一个编辑框:2.在编辑框中输入c代码#include<stdio.h>int main(){ printf("我真的好帅啊"); return 0;}当你输入完毕之后点一下键盘右上角ESC键,输入“:”(这是冒号),然后输入wq (就是保存退出的的意思)3.输入gcc -o hello hello.c ...原创 2021-09-19 22:17:40 · 587 阅读 · 0 评论