![](https://img-blog.csdnimg.cn/647493b5a71f4acf95315aa9b774b202.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux的系统编程+网络编程
文章平均质量分 93
在学系统编程之前,一定要先学习Makefile,这会为后续的学习提高很大效率。 之后的系统编程,主要有几大块:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。
妄北y
一人写bug,万人创世界
展开
-
Linux下的系统编程——基础操作(一)
因为单纯C语言单一进程的壁垒和单纯C语言在操作硬件上的壁垒这两点,所以我们需要实现并发,需要到内核层面上去访问硬件,使硬件访问的效率更高一点。下面让我们一起认识一些Linux下的一些系统编程的基础操作吧原创 2023-08-22 20:52:37 · 2483 阅读 · 0 评论 -
Linux下的系统编程——vim/gcc编辑(二)
在Linux操作系统之中有很多使用的工具,我们可以用vim来进行程序的编写,然后用gcc来生成可执行文件,最终运行程序。下面就让我们一起了解一下vim和gcc吧原创 2023-08-24 10:57:06 · 3918 阅读 · 0 评论 -
Linux下的系统编程——gdb调试工具(三)
程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪。到目前为止我们的调试手段只有一种∶根据程序执行时的出错现象假设错误原因﹐然后在代码中适当的位置插入printf﹐执行程序并分析打印结果﹐如果结果和预期的一样﹐就基本上证明了自己假设的错误原因﹐就可以动手修正Bug了,如果结果和预期的不一样﹐就根据结果做进一步的假设和分析。我们介绍一种非常强大的调试工具gdb,可以完全操控程序的运行﹐使得程序就像你手里的玩具一样﹐叫它走就走﹐叫它停就停﹐并且随时可以查看程序中所有的。原创 2023-08-24 13:53:27 · 2393 阅读 · 0 评论 -
Linux下的系统编程——makefile入门(四)
许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。原创 2023-08-24 21:16:22 · 2766 阅读 · 0 评论 -
Linux下的系统编程——系统调用(五)
由操作系统实现并提供给外部应用程序的编程接口。系统调用就是应用程序同系统之间数据交互的桥梁。原创 2023-08-25 13:07:27 · 2542 阅读 · 0 评论 -
Linux下的系统编程——文件与目录操作(六)
在Linux系统中,文件和目录的操作非常灵活。用户可以通过命令行或者图形界面来进行操作。下面是Linux文件和目录操作的一些常见命令:原创 2023-08-31 14:21:05 · 2953 阅读 · 0 评论 -
Linux下的系统编程——认识进程(七)
程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等等.下面让我们开始对Linux进程有个初步的了解吧。原创 2023-09-01 21:03:43 · 2602 阅读 · 0 评论 -
Linux下的系统编程——进程的执行与回收(八)
前面我们对进程已经有了一个初步的了解与认识,现在让我们学习一下进程中一些函数的具体使用,比如exec可以执行一些指定的程序,wait / waitpid可以回收子进程,什么是孤儿进程,什么是僵尸进程,下面让我们一起对这些进行中的操作进行学习吧。原创 2023-09-05 21:05:17 · 2637 阅读 · 0 评论 -
Linux下的系统编程——进程间的通信(九)
前面我们已经对进程已经有了一个简单的了解与认识,那么进程间的通信是什么样的呢,什么是父子进程,什么是兄弟进程,没有血缘关系间的进程是如何实现进程通信的,下面让我们一起学习一下什么是进程间的通信吧。原创 2023-09-06 22:26:33 · 2935 阅读 · 0 评论 -
Linux下的系统编程——共享存储映射(十)
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。原创 2023-09-08 14:13:21 · 2792 阅读 · 4 评论 -
Linux下的系统编程——信号(十一)
信号在我们的生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪...... 他们都有共性,信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。 Unix 早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley 和 AT&T 都对信号模型做了更改,增加 了可靠信号机制。但彼此不兼容。POSIX.1 对可靠信号例程进行了标准化。原创 2023-09-13 22:07:03 · 2848 阅读 · 0 评论 -
Linux下的系统编程——守护进程、线程(十二)
我们知道进程拥有一个PCB,在Linux中被称为task_struct,并且有一个进程地址空间,也有一个页表,通过页表指向物理内存,但是从今天开始,对进程的概念可能发生变化,这个我们后边来说,在Linux中,并没有真正的线程,而是使用进程的PCB来模拟线程,也就是说一个线程在创建时,只会去创建一个PCB,而这个PCB也指向主线程的虚拟地址空间,和其他线程一起共享内存的代码和数据。一个线程也被称为一个执行流,这是因为线程是被CPU调度的执行流,而一个进程就是分配系统资源的基本实体。下面让我们进入线程的学习吧。原创 2023-09-17 18:51:52 · 2665 阅读 · 0 评论 -
Linux下的系统编程——线程同步(十三)
在多线程编程中,如果多个线程同时访问和修改共享资源,可能会产生竞争条件和数据不一致的问题。同步机制用于协调线程之间的访问和操作,确保数据的正确性和一致性。为了避免多个线程同时访问和操作共享资源导致的问题,可以使用互斥锁(mutex)来实现线程的互斥访问。互斥锁可以保证同一时间只有一个线程访问共享资源、条件变量用于线程之间的通信和同步。一个线程可以等待某个条件成立,而其他线程可以通过发送信号来改变条件变量的状态,从而唤醒等待的线程。读写锁是一种特殊的锁,用于控制对共享资源的读取和写入。原创 2023-09-18 11:55:08 · 2418 阅读 · 0 评论 -
Linux下的网络编程——网络基础、socket编程(一)
前面我们学习了Linux的系统编程,从今天我们就要开始Linux网络编程的学习了,Linux网络编程中的知识点可能没有前面的Linux系统多一点,但是基础的网络知识我们还是需要了解的,并且网络编程中的socket的知识也是相当重要的,那么现在我们就开始Linux网络编程的学习吧。原创 2023-09-22 10:55:15 · 2339 阅读 · 0 评论 -
Linux下的网络编程——C/S模型TCP(二)
TCP协议被广泛应用 其根本原因就是提供了详尽的可靠性保证 基于TCP的上层应用非常多 比如HTTP、HTTPS、FTP、SSH、MySQL等。TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓“连接”,其实是客户端和服务器端内存里保持的一份关于对方的信息(IP地址、端口号)下面让我们学习一下什么是TCP协议吧。原创 2023-09-23 15:40:49 · 2398 阅读 · 0 评论 -
Linux下的网络编程——C/S模型 UDP(三)
UDP(User Datagram Protocol,用户数据报协议)是一种在计算机网络中常用的传输层协议。与TCP(传输控制协议)相比,UDP是一种无连接的协议,不具备可靠性和流量控制等特性,但由于其简单、高效的特点,被广泛应用于实时性要求较高、对数据完整性要求较低的应用场景。下面让我们一起对UDP进行一个简单的学习吧。原创 2023-09-23 22:06:11 · 2353 阅读 · 0 评论 -
Linux下的网络编程——B/S模型HTTP(四)
HTTP是基于B/S架构进行通信的,而HTTP的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如。原创 2023-09-24 15:04:33 · 2278 阅读 · 0 评论