Linux学习
文章平均质量分 67
昕昕向荣
这个作者很懒,什么都没留下…
展开
-
Linux的相关命令
1.基本命令(1)ls:显示当前工作目录下的文件 ls -a (显示所有文件,包括隐藏文件 —— 文件名以 “ . ” 开头的文件) ls -l (查看文件的详细信息,其中详细情况包括:文件类型,权限,连接数,属主,组,大小,最后修改时间) ls -i (查看文件的iNode号)(2)pwd:查看当前工...原创 2018-07-31 09:13:39 · 101 阅读 · 0 评论 -
网络编程——TCP编程
TCP协议:面向连接,可靠的,字节流服务服务器:socket bind listen accept recv/send close客户端:socket connect send/recv close#include<sys/types.h>#include<sys/socket.h>int ...原创 2018-11-29 22:23:50 · 208 阅读 · 0 评论 -
Linux复习(系统编程4)
父子进程1.父子进程之间数据(.data\ .bss\ .stack\ .heap),都是不共享的 父子进程任意一个进程对数据的修改并不会影响另一个进程的数据2.写时拷贝技术 —— .heap段 fork之后,父子进程共享所有的数据区域,但是内核将这些区域设置为只读,父子进程中任意一个进程试图修改数据,内核会将要修改的数据所在的页拷贝一份。 作用:提高f...原创 2018-11-29 23:08:01 · 139 阅读 · 0 评论 -
网络编程——UDP编程
#include<sys/types.h>#include<sys/socket.h>ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr* src_addr,socklen_t *addrlen);ssize_t sendto(...原创 2018-11-30 00:08:30 · 144 阅读 · 0 评论 -
线程池的实现
线程池的实现 大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较...原创 2018-11-28 10:52:43 · 145 阅读 · 0 评论 -
Linux高性能服务器编程
Linux高性能服务器编程就是在Linux网络编程的基础上,将服务器与客户端建立面向连接时,只能一台服务器与一台客户机通信,改变为一台服务器可以与多台客户端通信。 这里,我们怎样能做到一台服务器与多台客户机通信呢?我们可以通过多进程通信和多线程通信来完成这个功能。 多进程通信是通过fork()函数,由父进程通过fork,生成子进程,实现多进程,使一台服务器可以与多台客户端进行通信。...原创 2018-11-28 11:06:02 · 252 阅读 · 0 评论 -
I/O复用——select的实现
I/O复用I/O复用是指一个进程或一个线程能够同时对多对文件描述符(sockfd)提供服务。那么服务器上的进程或线程如何对多个文件描述符统一监听,当任意一个文件描述符上有事件发生,其都能及时处理?有三种方法,今天我着重介绍一下第一种1.select2.poll3.epollselectint select(int nfds,fd_set *readfds,fd_s...原创 2018-12-01 16:39:04 · 173 阅读 · 0 评论 -
多进程编程——共享内存
进程间通讯有四种方式:信号量、管道、消息队列、共享内存我们之前已着重介绍过信号量、管道。现着重介绍一下共享内存。共享内存 共享内存是最高效的IPC机制,因为它不涉及进程之间任何的数据传输。这种高效率带来的问题是,我们必须用其他辅助手段来同步进程对共享内存的访问,否则就会产生竞态条件。因此,共享内存通过和其他进程间通信方式一起使用。 Linux共享内存的A...原创 2018-12-05 11:21:40 · 1864 阅读 · 0 评论 -
I/O复用——poll
I/O复用中poll的系统调用#include<poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);(1)fds参数是一个pollfd结构类型的数组,它指定所有我们感兴趣的文件描述符上发生的可读、可写和异常事件。pollfd的结构体定义如下:struct pollfd{ ...原创 2018-12-08 13:10:54 · 941 阅读 · 0 评论 -
I/O复用——epoll
内核事件表epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是一个函数。其次,epoll吧用户关心的文件描述符上的事件放在内核里的一个时间表中,从而无需像select和poll那样每次调用都要重复传入文件描述符或事件集。但epoll需要使用一个额外的文件描述符;来唯一标识内核中的这个事件表。这个文件描述符...原创 2018-12-08 13:16:43 · 139 阅读 · 0 评论 -
三种I/O复用的比较
三种I/O复用的比较 系统调用 select poll epoll 事件集合 用户通过3个参数分别传入感兴趣的可读、可写及异常等事件,内核通过对这些参数的在线修改来反馈其中的就绪事件。这使得用户每次调用select都要重置这3个参数 统一处理所有的...原创 2018-12-08 15:59:44 · 332 阅读 · 0 评论 -
I/O复用——LT & ET
LT和ET模式 epoll对文件描述符的操作有两种形式:LT(Level Trigger,电平触发)和ET(Edge Trigger,边沿触发)模式。LT模式是默认的工作模式,这种模式下epoll相当于一个效率较高的poll。当往epoll内核事件表中注册一个文件描述符上的EPOLLIN事件时,epoll将以ET模式来操作该文件描述符,ET模式是epoll的高效工作模式。 对于采用...原创 2018-12-08 16:42:45 · 306 阅读 · 0 评论 -
TCP,UDP的报头详解
本博客借鉴谢希仁第六版《计算机网络》的第九章TCP报头(1)源端口和目的端口各占2个字节,分别写入源端口号和目的端口号,TCP的分用功能是通过端口实现的。(2)序号占4个字节。序号范围是[0,2^32-1],共2^32(即4282967296)个序号,序号增加到2^32-1后,下一个序号就回到0,也就是说序号使用mod 2^32运算。TCP是面向字节流的。在一个TCP连接中传...原创 2018-11-29 20:21:54 · 15976 阅读 · 3 评论 -
网络编程——TCP与UDP的区别,TCP的连接过程
TCP/IP协议模型位于传输层,只要有TCP,UDP协议组成TCP:面向连接的,可靠的,字节流服务,TCP服务器必须给每个连接分配资源UDP:无连接,不可靠的,数据报服务,UDP不需要给每个连接分配资源面向连接面向连接:在真正通讯之前,必须先建立一条通讯线路,必须先完成连接TCP完成连接的过程: 建立连接:三次握手 断开连接:四次挥手(这里借鉴谢希仁第五...原创 2018-11-28 23:46:53 · 578 阅读 · 0 评论 -
Linux中加深理解fork的小例子
关于fork的详细解释 fork是Linux中用来创建与父进程相同子进程的系统调用函数,他创建一个原有进程的精确副本,包括所有的文件描述符,寄存器等全部内容。在fork之后,原有的进程及其副本(父与子)就分开了。在fork时,所有的变量具有一样的值,虽然父进程的数据被复制用以创建子进程,但是其中一个的后续变化并不会影响到另一个,两个进程就是独立个体,各自运行,互不干扰,父子进程谁先执行不由f...原创 2018-08-04 21:12:00 · 7666 阅读 · 0 评论 -
vim(vi)下的三种模式及其相关命令
vim(vi)下的三种模式1.命令行模式2.末行模式3.插入模式三种模式的联系及其相互转换 在我们输入vi命令进入编写程序的页面后,我们看到的是命令行模式,在我们输入“a”、“i”、“o”、“O”后,我们会进入插入模式,在我们想退出插入模式时,我们需点击ESC键,即可退出,而我们想保存我们所写的程序,再退出编写程序页面,我们必须输入“:”、“?”、“/”从命令行模式...原创 2018-08-01 14:05:58 · 1335 阅读 · 1 评论 -
动态库与静态库的概念与使用
静态库:静态库相当于中间文件(.o)的集合,静态库是在链接时使用,将静态库中的程序直接合成到最终的可执行文件中。windows下表示为: .libLinux: .a动态库(共享库):不可执行的可执行文件(其中没有main函数)使用动态库的程序运行起来后,动态将动态库加载到内存上执行。windows: .dllLinux: .so静态库的生成过程:...原创 2018-08-01 19:45:26 · 498 阅读 · 0 评论 -
可执行文件的调试
Linux的两种版本debug版本 调试版本 程序开发人员使用版本 链接:合并符号表,合并section调整段,大小和段起始位置release版本 发行版本 提供给用户使用 gcc默认生成release版本...原创 2018-08-01 19:15:32 · 683 阅读 · 0 评论 -
Linux中源文件生成可执行文件的过程
源文件通过编译、链接形成可执行文件编译编译可以分为三部分:预编译,编译,汇编预编译:main.cgcc -E main.c编译:main.igcc -S main.i汇编:main.sgcc -c main.o链接:main.ogcc main.o ----->a.outgcc mai...原创 2018-08-01 14:47:55 · 2530 阅读 · 0 评论 -
进程管理
进程的概念:1.运行中的程序 程序:存储在磁盘上的可执行文件 程序的一次实例化,一次运行过程2.进程就是一组有序的指令+数据+资源的一个集合 程序:指令 数据操作系统如何表示出一个进程:PCB —— 进程控制块pid 进程的一个标识 pid必须唯一state 进程的状态优先级...原创 2018-08-02 14:25:37 · 149 阅读 · 0 评论 -
线程
线程是进程内部的一条执行序列(执行流),一个进程至少有一个线程,main函数所代表的执行流。通过线程库创建新的线程,称之为函数线程。同一个进程的线程是并发执行的。实现方式1.用户级线程(用户管控线程) 缺点:内核只通过进程PCB管控进程,故无法管控线程,导致线程的实现只能由用户来完成。 当线程阻塞时,内核也无法调控,所以实现复杂度很高 优点:调控...原创 2018-10-28 23:31:45 · 119 阅读 · 0 评论 -
多进程编程——信号量
一、为什么会引进信号量 在这里,我们先说明几个概念。 1.同步:同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待。传递信息所产生制约关系。进程的直接制约关系就是源于它们之间的相互合作。2.互斥:互斥亦成为间接制约资源。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当临界资源的进程退出临界区后,另一个进程才...原创 2018-10-24 21:40:45 · 1438 阅读 · 0 评论 -
Linux复习(系统编程1)
main函数的参数int main(int argc, char *argv[], char *envp[])argc代表传递给参数的个数,argv[]表示参数列表,envp[]代表环境变量argc >=1 参数列表中至少有一个参数缓冲区刷新的条件1.遇见\n2.fflush函数3.缓冲区满10244.进程结束exit函数1.进程用_...原创 2018-11-13 17:01:16 · 111 阅读 · 0 评论 -
Linux复习(系统编程2)
文件操作1.Linux平台下的文件操作fopen fread fwrite fclose fseek fgets 库函数open read write close lseek 系统调用函数系统调用函数是系统内核提供给用户访问系统管理的底层硬件接口。系统调用函数用户层只是一个接口...原创 2018-11-13 21:30:13 · 135 阅读 · 0 评论 -
Linux复习(系统编程3)
系统调用函数:系统提供的用于上层使用的系统资源的接口。在用户态调用,在内核态执行,由操作系统内核实现。 windows API接口库函数:第三方库 C---->libc C++----->libc++ mudo库 ...原创 2018-11-18 00:48:16 · 144 阅读 · 0 评论 -
多进程编程——管道
进程间通讯有四种方式:信号量、管道、消息队列、共享内存 我们以前已经介绍过了信号量,今天我们着重介绍一下管道。 管道可以分为有名管道和无名管道。有名管道 有名管道利用管道文件实现进程间通讯,管道文件仅仅是磁盘上的一个文件标识,其真实数据存储在内存上。1.命令:mkfifo filename2.函数:int mkfifo();对于管道文件的打开操作,必须是有...原创 2018-12-03 23:54:19 · 602 阅读 · 0 评论