
Linux
文章平均质量分 79
对Linux基础知识的学习,以及在Linux平台的代码编程学习网络编程、多线程、I\O复用等知识
悲伤土豆拌饭
做一个cool guy
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
系统调用与库函数的区别
区别系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间库函数的代码都是由用户自己完成的,但是系统调用的是在操作系统中,需要从用户空间转换到内核空间这属于库函数(编号为3)这个属于系统调用(编号为2)有些东西只能由操作系统来进行,而有些就可以直接由我们用户实现我们看一下系统调用如何实现用户使用系统调用时,会查看系统调用号(来自源码),例如当应用程序去执行open()的时候会产生中断,当前程序不能继续执行,完成用户态到内核态的切换,由内核态来继续执行调用open原创 2021-11-26 20:41:53 · 737 阅读 · 0 评论 -
内存的申请与释放
首先我们有两个问题malloc()申请1G的内存能否成功?判断依据是什么?申请了一块空间没有free,进程就结束了,那么空间被回收了吗?我们写一段代码来申请1G空间试一试#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>int main(){ char *s = (char*)malloc(10原创 2021-11-26 21:08:07 · 1379 阅读 · 0 评论 -
Linux线程的创建与同步
线程的概念、实现;线程使用;线程安全;线程同步等只是概念原创 2021-12-01 16:11:40 · 3903 阅读 · 0 评论 -
HTTP协议通信
HTTP通信HTTP协议介绍浏览器与服务器通信过程HTTP的长连接与短连接HTTP请求方法和应答状态码原创 2021-12-07 20:48:40 · 3110 阅读 · 0 评论 -
TCP连接的状态
TCP连接状态TCP连接的建立与断开状态转移TIME_WAIT 状态TCP连接的建立与断开建立连接,三次握手,发起连接方(执行connect())向对方发送一个SYN报文,服务器收到后会回复自己的SYN报文以及确认收到ACK报文,客户端收到后在向服务端发送一个确认ACK报文断开连接,四次挥手,主动关闭的一方会通知对方自己要关闭发送FIN报文,对方收到后会回复确认ACK报文,并且在不久后对方也需要关闭(close()),也想主动断开方发送一个FIN报文通知主动断开方自己要关闭,随后主动断开方会回复确认原创 2021-12-06 11:44:35 · 2583 阅读 · 0 评论 -
IO多路复用机制——select、poll、epoll
IO多路复用IO复用方法IO复用方法I/O复用使得程序能同时监听多个文件描述符,这对于提高程序的性能至关重要;网络程序在下列情况下需要使用I/O复用技术:TCP服务器同时要处理监听套接字和连接套接字服务器要同时处理TCP请求和UDP请求程序要同时处理多个套接字客户端程序要同时处理用户输入和网络连接服务器要同时监听多个端口原创 2021-12-11 21:56:27 · 2391 阅读 · 0 评论 -
网络的基本概念
网络的基础概念,网络中数据传输的简单流程原创 2021-12-02 13:32:18 · 1452 阅读 · 0 评论 -
UDP服务器客户端编程流程
UPD的特点与服务端客户端编程流程,UDP直接数据传输的方法原创 2021-12-05 17:20:10 · 4956 阅读 · 0 评论 -
进程替换exec
为什么要替换进程呢在Linux中,进程的产生都是由一个进程fork()一个子进程,加exec将子进程替换成我们需要的进程,来产生新的进程在Linux系统中有一个bash,我们执行三次ps -f来观察一下我们发现,三次ps -f属于三个不同的进程(有不同的pid),但是他们都有相同的父进程就是bash,也就是说我们的ps进程产生就是,通过bash进程fork复制一个子进程,再通过子进程替换成我们需要的进程做到的...原创 2021-11-27 17:22:53 · 913 阅读 · 0 评论 -
Libevent库的介绍与应用
Libevent库Libevent概述Libevent使用模型Libevent库使用示例Libevent事件类型和框架结构Libevent概述Libevent是开源社区的一款高性能的I/O框架库,使用Libevent的著名案例有:高性能的分布式内存对象缓存软件memcached,Googlo浏览器Chromium的Linux版本。作为一个I/O框架库原创 2022-01-05 20:59:54 · 5050 阅读 · 0 评论 -
TCP连接三次握手与四次挥手
tcp的三次握手与四次挥手,以及tcp通过应答确认,超时重传,滑动窗口来保证tcp的可靠性原创 2021-12-04 18:01:46 · 399 阅读 · 0 评论 -
TCP服务器客户端编程流程
tcp服务器与客户端的代码编写,tcp粘包以及netstat命令的使用原创 2021-12-03 20:31:02 · 2078 阅读 · 0 评论 -
Linux信号的使用
信号的基本概念信号是系统相应某个条件而产生的事件,进程接收到信号会执行相应的操作与信号有关的系统调用在signal.h头文件中有声明常见信号的值,及对应的功能说明:通过对某个进程发送信号来告诉进程某个事件产生了,再由进程处理这个事件(举个例子:比如我们在上课,老师说下课这就是一个信号,然后我们都收拾东西开始回家这就属于对事件的处理)再举个例子,比如我们现在运行一个sleep 300,然后我们ctrl + c,这个过程就是sleep进程收到我们的结束进程的信号,然后进行结束进程进程可以通过原创 2021-11-27 18:02:26 · 511 阅读 · 0 评论 -
进程间通信——管道、信号量、共享内存、消息队列、套接字
进程间通信管道有名管道的创建使用为什么无名管道只能在父子进程通信信号量两个程序访问同一个资源管道有名管道无名管道区别:有名管道在任意两个进程间通信无名管道在父子进程间通信有名管道的创建使用创建有名管道使用:mkfifo打开管道:open()关闭管道:close()读数据:read()写数据:write()我们创建一个管道我们写一个程序,给管道写入数据,再从另一个程序读取数据这样看好像用文件操作也可以实现:通过一个程序写入数据,另一个文件读取数据。但是这样做有一些问题原创 2021-11-29 20:19:25 · 774 阅读 · 0 评论 -
主函数的参数argc、argv、envp
主函数的三个参数int main(int argc, char* argv[], char* envp[])argc 主函数的参数个数argv 主函数的参数内容envp 环境变量首先我们写这样一段代码,来查看main函数的参数都有那些#include<stdio.h>int main(int argv,char argv[],char envp[]){ int i = 0; printf("argc = %d\n",argc);原创 2021-11-25 08:51:29 · 1720 阅读 · 0 评论 -
fork复制进程
进程的描述进程是一个正在运行的程序每个进程都有一个进程控制块,英文缩写PCB进程控制块是一个用结构体struct task_struct来实现操作系统如何管理进程进程控制块是进程存在的唯一标志,pid是一个整型,它属于是进程的身份证号码,由于pid是由整型表示的,所以pid的范围也就是一个整型的大小范围fork复制进程首先会将原来的进程(父进程)PCB复制一块出来,并且给他申请一个pid,来唯一标识子进程,接下来将整个进程的实体复制一份给子进程复制出来的子进程与父进程是相同的,唯一不原创 2021-11-26 19:17:45 · 589 阅读 · 0 评论 -
在Linux系统c语言实现个人命令解释器(mybash)
c语言实现mybash关于bash我们的bash是怎么实现的关于bashbash是属于shell程序的一种,即解释命令器的一种。shell不是具体哪一款程序,是一类程序的统称,这些程序只要是能够按照用户的要求去调用操作系统的接口,就可以称之为shell程序。通过shell可以将用户与内核联系起来。我们的bash是怎么实现的假如我们已经执行了我们的mbash,这时候我们需要通过键盘获取执行命令,怎么做呢?需要注意的是,如果我们输入“ls”,buff获取到的实际上是“ls\n”,继而我们需要将原创 2021-11-20 23:53:00 · 2105 阅读 · 0 评论 -
Linux的基本操作与基础知识
Linux基本操作Linux和Winodws的区别Linux系统的目录结构常见目录说明文件类型文件权限基本命令Linux和Winodws的区别1.Linux主要使用命令行操作系统,Windows图形化界面2.Linux主要应用于服务器,Windows是个人操作系统3.Linux属于开源项目,而Windows不开源4.Linux是多用户系统,Windows是单用户系统Linux系统的目录结构最顶层是根目录( / )常见目录说明/bin 存放常用命令(即二进制可执行程序)/etc原创 2021-11-24 20:56:20 · 1567 阅读 · 1 评论 -
printf方法居然有隐藏的缓冲区
printf缓冲区首先,我们的经常会使用到printf向屏幕输出一个内容,然后printf并不是直接将内容输出到屏幕上,它会先将需要输出的内容放入到缓冲区,知道缓冲区满或者程序结束才将内容输出的屏幕上为什么要这样做呢?因为printf输出的时候需要调用系统的接口,需要将我们的用户态切换到内核态,会有很大的开销,所以我们在输出的时候会设计一个缓冲区,将我们所有需要输出的内容存在缓冲区,这样我们只需要将用户态切换到内核态一次就可以将所有内容全部打印我们平时使用并感觉不到缓冲区在中间作用,我们写这样一个程原创 2021-11-25 09:23:11 · 424 阅读 · 1 评论 -
Linux操作文件的底层系统调用
操作系统的底层系统调用open() 打开一个文件read() 从文件中读取数据write() 向文件中写入数据close() 关闭文件我们首先打开帮助手册来看一下这些方法我们写一段代码,来创建写入文件#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<fcntl.h&g原创 2021-11-26 19:50:20 · 723 阅读 · 0 评论