Linux
文章平均质量分 52
学习记录
小小的个子
这个作者很懒,什么都没留下…
展开
-
Linux--FTP服务器功能--项目
一个子进程负责一条连接通道。原创 2023-10-07 10:03:29 · 625 阅读 · 0 评论 -
Linux--socket编程--双方收发
在服务端运行:./文件名 + IP + 端口号。在客户端运行:./文件名 + IP + 端口号。服务端得到:并且不会退出。原创 2023-10-04 13:39:13 · 200 阅读 · 0 评论 -
Linux--socket编程--服务端代码
查看struct sockaddr_in包含的东西:在/user/include下搜索:grep "struct sockaddr_in { " * -nirr : 递归i : 不区分大小写n : 显示行号。原创 2023-10-03 22:02:42 · 539 阅读 · 0 评论 -
Linux--socket编程
内核为每个由服务器进程接受的客户连接创建一个已连接套接字(表示TCP三次握手已完成),当服务器完成对某个给定客户的服务时,相应的已连接套接字就会被关闭。设置能处理的最大连接数, listen()并未开始接受连线,只是设置socket 的 listen 模式,listen()函数只用于服务器端,服务器进程不知道与谁连接,因此不会主动要求与某个进程连接,只是一直监听是否有其他客户进程与之连接,然后响应该连接请求,并做出处理:一个服务进程可以同时处理多个客户进程的连接。这些套接字处于SYN_REVD状态。原创 2023-10-03 16:29:44 · 221 阅读 · 1 评论 -
Linux--网络编程-字节序
是指多字节数据再计算机内存中存储或网络传输时各字节的存储顺序。原创 2023-10-03 11:27:31 · 237 阅读 · 0 评论 -
Linux--线程条件控制实现线程的同步
的互斥量对条件进行保护,调用者把锁住的互斥量传给函数。函数把调用线程放到等待条件的线程列表上,然后对互斥量解锁,这两个操作都是原子操作。这样就关闭了条件检查和线程进入休眠状态等待条件改变这两个操作之间的时间通道,这样线程就不会错过条件的任何变化。条件变量与互斥变量一起使用时,允许线程以无竞争的方式等待特定的条件发生。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。如果在给定的时间内条件不能满足,那么会生成一个代表一个出错码的返回量。原创 2023-10-01 01:56:30 · 216 阅读 · 0 评论 -
Linux--互斥锁
在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变成可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在加了两个锁的前提下,当线程A获得一把锁时,想要获得另外一把锁,线程B想要拿到对方手里的锁时,都不可以向下解锁,就会造成死锁。资源参考地址: https://www.cnblogs.com/xiehongfeng100/p/4620852.html。原创 2023-09-28 17:51:10 · 179 阅读 · 0 评论 -
Linux--线程 共享内存空间
如果使 t1 = 3时退出,运行结果发现:有的时候能捕获到 t1 == 3,退出线程t1;有的时候捕获不到,t1无法退出。原创 2023-09-19 11:16:02 · 321 阅读 · 2 评论 -
Linux--线程 创建、等待、退出
新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg。如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。attr参数用于定制各种不同的线程属性,暂可以把它设置为NULL,以创建默认属性的线程。资源参考地址: https://www.cnblogs.com/xiehongfeng100/p/4620852.html。线程 3 种操作:线程的创建,退出,等待。2)线程可以被同一进程中的其他线程取消。原创 2023-09-19 10:54:58 · 146 阅读 · 0 评论 -
Linux--线程(与进程区别)
(进程有独立的数据空间,要进行数据的传递只能通过通信的方式进行,同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用。有独立的地址空间,一个进程崩溃后,不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。有自己的堆栈和局部变量,但没有独立的地址空间,一个线程死掉就等于整个进程死掉,进程是程序执行时的一个实例,是分配系统资源(CPU时间、内存等)的基本单位。"进程——资源分配的最小单位,线程——程序执行的最小单位“①、线程的启动,切换比进程快,所需的空间少,效率高。原创 2023-09-18 10:04:00 · 188 阅读 · 0 评论 -
Linux--信号量
Linux下信号量函数都是在通用的信号量数组上进行操作,而不是在一个单一的二值信号量上进行操作。多道程序系统种存在许多进程,他们共享各种资源,然而有很多资源一次智能供一个进程使用。③、每次对信号量的PV操作不仅限于对信号量加 1 或减 1 ,而且可以加减任意正整数。②、信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。①、信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。用于实现进程间的互斥与同步,而不是用于存储进程间的通信数据。此程序运行一般为父进程先运行,然后运行子进程。原创 2023-09-17 17:04:25 · 314 阅读 · 1 评论 -
Linux--信号携带消息
sigqueue函数不但可以发送额外的数据,还可以让信号进行排队(操作系统必须实现POXI.1的实时扩展),有阻塞的信号,使用sigqueue发送多个同一信号,解除阻塞时,接收者会收到发送的信号队列中的信号,不是直接受到一次。如果设置为 SA_SIGINFO 属性时,说明了信号处理程序带有附加信息,也就是会调用 sa_sigaction 这个函数指针所指向的信号处理函数。成员,设置在其的信号集中的信号,会在捕捉函数调用前设置为阻塞,并在捕捉函数返回时恢复默认原有设置。发信号kill,收信号signal。原创 2023-09-17 11:23:52 · 120 阅读 · 0 评论 -
Linux--信号
比如,终端用户输入了ctrl+c来中断程序,会通过信号机制停止一个程序。需要高速内核,用户希望如何处理某一种信号,说白了就是写一个信号处理函数,然后将这个函数高速内核。当该信号产生时,由内核来调用用户自定义的函数,以此来实现某种信号的处理。对于每个信号来说,系统对应默认的处理动作,当发生了该信号,系统会自动执行。具体的信号默认动作可以使用man 7 signal 来查看系统的具体定义。信号定义在 signal.h,头文件中,信号名都定义为正整数。信号是从1开始编号的,不存在0号信号。原创 2023-09-16 22:00:43 · 357 阅读 · 0 评论 -
Linux--共享内存
/向共享内存写入数据)(5.6.不作为进程间通信的方式,控制一个临界资源)printf(“%s”,p);删除共享内存:ipcrm -m 共享内存id。3、消息队列(可以发送,也能接收消息)(有一块公共内存,可挂载,即发即收。1.创建/打开共享内存(shmget)1、无名管道(只能单向发送或接收)2、命名管道(只能单向发送或接收)4.释放共享内存(shmdt)查看共享内存:ipcs -m。(int *p=共享内存。5.关闭(shmctl)2.映射(shmat)原创 2023-09-15 10:14:46 · 136 阅读 · 0 评论 -
Linux--进程-消息队列--键值生成&消息队列移除
如指定文件的索引节点号为65538,换算成16进制为0x010002,指定的id为38,换算成16进制为0x26,则最后key_t返回值为0x26010002。系统建立IPC通讯(消息队列、信号量和共享内存)时必须指定一个id值。通常情况下,该id值通过ftok函数得到。如果要确保key_t值不变,需要确保ftok的文件不被删除,或者不用ftok,指定一个固定key_t值。一般在UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。原创 2023-09-13 10:45:33 · 985 阅读 · 0 评论 -
Linux--进程-消息队列
③、type < 0,返回队列中消息类型值小于或等于type绝对值的消息,如果有多个则取类型的最小值。①、如果没有与键值key相对应的消息队列,并且flag中包含了IPC_CREAT标志位。②、type > 0,返回队列中消息类型为type的第一个消息。进程终止时,消息队列及其内容并不会被删除。,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。①、消息队列是面向记录的,其中的消息具有特定的。①、type == 0,返回队列中的第一个消息。③、消息队列可以实现消息的。原创 2023-09-13 10:32:18 · 125 阅读 · 0 评论 -
Linux--数据通信编程实现(FIFO)
①若没有指定O_NONBLOCK(默认),只读open要阻塞到某个其他进程为写而打开此FIFO。类似的,只写open要阻塞到某个其他进程为读而打开它。②若指定了O_NONBLOCK,则只读open立即返回,而只写open将出错返回-1如果没有进程已经为读而打开该FIFO,其errno置ENXIO。运行read会发生阻塞,调用write之后程序继续进行。当open一个FIFO时,是否设置。原创 2023-09-12 21:10:39 · 474 阅读 · 0 评论 -
Linux--进程间通信
③它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。要关闭管道,只需要将这两个文件描述符关闭即可close(fd[0]);1、特点:①它是半双工的(数据只能在一个方向上流动),具有固定的读端和写端。管道建立时,会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开。②只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程)进程间通信-----IPC。①、FIFO可以在无关进程之间交换数据,与无名管道不同。FIFO,也称为命名管道,它是一种文件类型。原创 2023-09-08 09:39:20 · 283 阅读 · 0 评论 -
Linux--popen函数
比system在应用中的好处:可以获取运行的输出结果。linux下popen的使用。原创 2023-09-07 11:14:53 · 836 阅读 · 0 评论 -
Linux--system函数
linux system函数详解 https://www.cnblogs.com/leijiangtao/p/4051387.html。成功:则返回进程状态值;当sh不执行时,返回127;system函数相当于封装后的exec。原创 2023-09-07 10:48:21 · 552 阅读 · 0 评论 -
Linux--exec族函数及与fork共用
我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec函数族的函数执行成功后不会返回,调用失败时,会设置errno并返回-1,然后从原程序的调用点接着往下执行。有绝对路径运行 ls:运行 ls -l:获取系统时间date:(不加绝对路径)exaclp函数带p,所以能通过环境变量PATH查找到可执行文件ps。原创 2023-09-07 10:34:26 · 228 阅读 · 0 评论 -
Linux--进程创建(fork)-退出--孤儿进程
对于三个终止(exit、_exit和_Exit),实现这个的方法是,将其退出状态(exit status)作为参数传递给函数。在异常终止时,内核(不是进程本身)产生一个指示其异常终止原因的异常终止状态(termination status)。如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回;父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”,此时子进程叫做孤儿进程。Linux避免系统存在过多的孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。原创 2023-09-05 14:01:57 · 280 阅读 · 0 评论 -
Linux--进程概念
程序:是静态的概念,gcc xxx.c -o pro 磁盘中生成的pro文件,叫做程序。进程:是程序的一种与运行活动,通俗的意思是程序跑起来了,系统中就多了一个进程。进程A创建了进程B,那么A叫做父进程,B叫做子进程,父子进程是相对概念。每一个进程都有一个非负整数表示的唯一的ID,叫做pid,类似身份证。堆----mcalloc申请空间就在堆中。栈----存放局部变量, 传递参数, 存放函数的返回地址.流程控制,算法属于正文----代码段。未初始化的变量----bss段。初始化的变量----数据段。原创 2023-09-05 09:00:01 · 477 阅读 · 0 评论 -
fputc ---fgetc--- feof
/feof判断是否到达文件的尾巴.//一个字符一个字符的从文件中取出。//一个字符一个字符的输入。原创 2023-09-04 10:56:44 · 64 阅读 · 0 评论 -
--open与fopen的区别
由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。open返回文件描述符,而文件描述符是UNIX系统下的一个重要概念,UNIX下的一切设备都是以文件的形式操作。低级文件IO运行在内核态,高级文件IO运行在用户态。原创 2023-09-04 10:24:24 · 62 阅读 · 0 评论 -
linux--文件写入整数和结构体数组
【代码】linux--文件写入整数和结构体数组。原创 2023-09-03 11:51:25 · 109 阅读 · 0 评论 -
Linux—文件编程
动态文件 = open 静态文件 后在Linux内核产生一个结构体。文件描述符 = open(文件,--------)是一个非负整数。cp 源文件(src) 目标文件(des)如何用代码操作文件,实现文件的创建,打开,编辑等自动化执行?(seek_cur,指向文件光标当前位置)./mycp 源文件 目标文件。(seek_set,指向文件的头)(seek_end,指向文件的尾)编译:gcc 文件 -o mycp。参数0 参数1 参数2。fd文件描述符,偏移值,位置。原创 2023-09-03 11:01:47 · 727 阅读 · 0 评论 -
Linux--贪吃蛇项目
食物的位置:设置一个初始位置,用static设置一个静态变量,函数被重新调用的时候值不会改变。rand()生成一个随机数,生成较大的数采用取余,%20取余余数范围在0-19之间。先做一个节点,定义身体行列结构体,与地图上的坐标对比,如果相同则print[]身体节点(结构体)包含:行坐标,列坐标,下一个节点的位置(地址/指针)贪吃蛇实现自行游走;定义多个身子节点,在第一个节点基础上,行不变,列+/-1.先做上边一横,再做两竖,中间用空格填充, 最后做一横。蛇吃食物,重新刷新,并且使食物的位置保持在边框内。原创 2023-08-21 16:58:57 · 370 阅读 · 0 评论 -
linux--链表动态创建
单链表顺序为: head–>5–>4–>3–>2–>1–NULL。单链表顺序为: head–>1–>2–>3–>4–>5–NULL。当用头插法依次插入值分别为1,2,3,4,5的结点后,当用尾插法依次插入值分别为1,2,3,4,5的结点后,原创 2023-08-18 11:05:34 · 88 阅读 · 0 评论 -
linux -- 链表
>读作“指向结构体的”,其前面一定是一个指向结构体的指针。什么是链表–数据结构,是数据存放的思想,是一个集合。数组特点:元素地址连续,增删查改困难,不灵活。链表地址不连续,灵活,解决了增删困难的问题。点“.”一般读作“的”,其前面是结构体。第一个指针为链表头,指向其他地址。原创 2023-08-13 18:03:37 · 293 阅读 · 0 评论 -
linux--网络IP配置ubnutu
三种网络工作模式:1.Bridge(桥接模式)2.NAT(网络地址转换模式)3.Host-Only(仅主机模式)1.编辑——虚拟网络——名称类型——如果没有则添加网络——桥接模式——桥接到真正的物理网卡。例如:ens33或者etoh的IP地址为:192.168.1.175。windows查看网络地址:ipconfig,查看当前网卡状态。修改IP地址(修改的地址与查到的IP地址为同一网段)2.虚拟机设置网络:网络适配器——桥接模式/自定义。2.每台互相通信,独立配置。配置虚拟网络:(桥接)原创 2023-08-13 15:55:45 · 131 阅读 · 0 评论 -
Linux简介--基础操作--文件传输(linux-Windows)
cp b.c test.c:拷贝b.c文件并新建test.c文件,将b.c里内容拷贝到test.c里。1、linux和windows都是操作系统,多任务,多用户,多线程…mv *.c chenlichen:将所有.c文件异动到该文件夹里。:wq :在命令行模式下按冒号,后输入wq,w保存,q退出。mv a.c b.c:将a.c文件变成b.c文件。vi a.c:进入或创建vi命令行模式,编写程序。gcc a.c:编译该程序,会生成a.out文件。vi a.c:创建a.c文件进入vi模式。原创 2023-08-10 21:42:47 · 442 阅读 · 0 评论