![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux学习
文章平均质量分 64
Leslie X徐
頑張ろ
展开
-
树梅派4B+docker+Home assistant
raspbian+docker+hass原创 2023-04-19 01:30:15 · 445 阅读 · 1 评论 -
win10安装ubuntu子系统界面
win10 ubuntu子系统+VcXsrv+xfce4下载windows商店下载 ubuntu18.04LTSwin10 下载 VcXsrvubuntu中下载 xfce4桌面配置xfce4桌面Ubuntu中执行以下操作:sudo apt-get install xfce4-terminalsudo apt-get install xfce4打开配置文件sudo vim ~/.bashrc在最下方加入一下命令:export DISPLAY=:0.0export LIBGL_ALWA原创 2021-09-18 18:18:59 · 165 阅读 · 0 评论 -
Linux学习_多路I/O复用
网络高级编程 多路I/O复用概念如recv,send,read和write等函数都是阻塞性函数,若资源没有准备好则调用该函数的进程将进入阻塞状态。我们可以使用I/O多路复用解决,有两种方式:fcntl函数实现(非阻塞方式)select函数实现守护进程fcntl非阻塞实现动态数组函数:/* * vector_fd.c * */#include "vector_fd.h"#include <malloc.h>#include <assert.h&g原创 2021-05-21 00:39:48 · 123 阅读 · 0 评论 -
Linux学习_网络并发处理
服务器端并发性处理处理方式多进程父进程accept(),获取客户端后fork()子进程多线程多路复用I/O多进程服务器/* * TCP服务器.c * * */#include <netdb.h>#include <sys/socket.h>#include <unistd.h>#include <string.h>#include <stdio.h>#include <stdlib.h>原创 2021-05-21 00:37:22 · 104 阅读 · 0 评论 -
Linux学习_自定义网络协议
自定义协议定义如http的头部协议协议结构:协议头部头部校验码协议体部要传输的数据头文件/* * msg.h * */#ifndef __MSG_H__#define __MSG_H__#include <stddef.h>typedef struct{ //协议头部 char head[10]; char checknum; //校验码 //协议体部 char buff[512]; //数据 }Msg;/*发送一原创 2021-05-21 00:36:24 · 517 阅读 · 0 评论 -
Linux学习_网络广播
广播概念广播实现一对多的通讯通过向广播地址发送数据报文实现的设置广播套接字选项用于修饰套接字以及其底层通讯协议的各种行为。函数setsockopt和getsockopt可以查看和设置套接字的各种选项。#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void *o原创 2021-05-20 10:43:15 · 140 阅读 · 0 评论 -
Linux学习_IPC进程间通信
信号量与管道进程之间数据通信的手段:一、管道匿名管道:只允许亲缘关系进程使用- 使用pipe创建匿名管道 int pipe(int pipefd[2]); //成功返回0,失败返回-1 //pipe执行后,将管道读端与pipe[0]绑定,写端与pipe[1]绑定。 //注意pipe()在fork()前使用保证两个进程共用一根管道。命名管道:任何进程都可以使用- 使用mkfifo创建命名管道 #include <sys/types.h> #原创 2021-05-19 15:14:08 · 188 阅读 · 0 评论 -
Linux学习_域名解析
域名解析编程概念域名:比如www.google.com,域名与IP是绑定的。根据域名查找IP地址:发送域名给域名解析服务器DNS,找到域名绑定的IP地址知道了IP地址后就可以去访问该网站域名解析函数#include <netdb.h>struct hostent{ char *h_name; /*正式主机名*/ char **h_aliases; /*别名,字符串数组*/ int h_addrtype; /*协议类型*/ int h_length; /*网络地址原创 2021-05-19 00:24:39 · 123 阅读 · 0 评论 -
Linux学习_UDP编程
UDP编程UDP编程模型UDP客户端服务器编程模型服务器端调用序列调用socket函数创建套接字调用bind绑定本地地址和端口调用readfrom函数获取发送来的数据调用sendto函数向对方发送数据报文调用close关闭套接字客户端调用序列调用socket函数创建套接字调用bind绑定本地地址和端口,可不绑定调用sendto函数向对方发送数据报文调用readfrom函数获取发送来的数据调用close关闭套接字数据传输发送数据报文函数#include原创 2021-05-19 00:23:56 · 84 阅读 · 0 评论 -
Linux网络学习_TCP客户端服务器编程
TCP编程TCP编程模型TCP客户端服务器编程模型客户端调用序列调用socket函数创建套接字调用connect连接服务器端调用I/O函数(read/write)与服务器端通讯调用close关闭套接字服务器端调用序列调用socket函数创建套接字调用bind绑定本地地址和端口调用listen启动监听调用accept从已连接队列中提取客户连接调用I/O函数(read/write)与服务器端通讯调用close关闭套接字套接字与地址绑定绑定地址#in原创 2021-05-16 14:27:45 · 180 阅读 · 0 评论 -
Linux网络学习_socket套接字
套接字概念Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段。Linux中的网络编程通过Socket接口实现,Socket即是一种特殊的IO,提供对应的文件描述符。一个完整的Socket都有一个相关描述{协议,本地地址,本地端口,远程地址,远程端口}(五元组);每一个Socket有一个本地的唯一Socket,由操作系统分配。创建Socket#include <sys/types.h&原创 2021-05-16 14:26:50 · 105 阅读 · 0 评论 -
Linux网络学习_网络的基本概念
网络的基本概念概念计算机联网目的使用远程资源共享资源、程序和数据分布处理协议计算机网络中实现通信必须有一些约定,如对速率、传输代码、代码结构、传输控制和出错控制等约定,这些约定被定义为通信协议在两个节点之间要成功进行通信,两个节点之间必须遵守协议。在Internet中,最为通用的网络协议是TCP/IP协议。网络分层模型OSI七层模型TCP/IP四层模型例子应用层应用层Telnet、FTP、SMTP、DNS、SNMP、Http表示层-原创 2021-05-16 14:25:15 · 122 阅读 · 1 评论 -
Linux学习_文件操作权限
文件权限操作open在打开一个文件时可以传入文件的创建权限反过来说,我们可以去获得并修改一个文件的权限获得权限:access函数,注意并不是获得完整的权限值,而是查看针对user的组别,是否有传入的权限 #include <unistd.h> int access(const char *pathname, int mode);返回:拥有返回0,不拥有-1参数pathnamemode:F_OK:文件是否存在R_OK:文件是否可读W_OK:文件是否可原创 2021-05-13 13:39:07 · 98 阅读 · 0 评论 -
Linux_文件系统类型
文件在内核中的数据结构一个打开的文件在内核中使用三种数据结构(结构体)表示1.文件描述符表文件描述符标志文件表项指针2.文件表项文件状态标志读、写、追加、同步和非阻塞等状态标志当前文件偏移量i节点表项指针引用计数器3.i节点文件类型和对该文件的操作函数指针当前文件长度文件所有者文件所在的设备、文件访问权限指向文件数据在磁盘块上所在位置的指针等。框图:...原创 2021-05-13 13:06:57 · 122 阅读 · 0 评论 -
Linux学习_系统文件IO
系统文件IOC程序文件IO结构typedef struct iobuf{ int cnt; /*剩余的字节数*/ char *ptr; /*下一个字符的位置*/ char *base; /*缓冲区的位置*/ int flag; /*文件访问模式*/ int fd; /*文件描述符*/}FILE;标准C的IO缓存类型缓存类型全缓存要求填满整个缓存区后才进行I/O系统调用操作。对于磁盘文件通常使用全缓存访问。行缓存涉及一个终端时(例如标准输入输出),使用行缓存。行原创 2021-05-12 23:57:20 · 154 阅读 · 1 评论 -
Linux学习_线程的死锁和信号
线程的死锁,信号的概念死锁概念死锁:两个线程试图同时占用两个资源,并按不同的次序锁定相应的共享资源。解决方式:按相同的次序锁定相应的共享程序。使用函数pthread_mutex_trylock(),它是函数函数pthread_mutex_lock()的非阻塞函数。示例:/* * dead_lock.c * * */#include <pthread.h>#include <errno.h>#include <stri原创 2021-05-12 00:47:28 · 86 阅读 · 0 评论 -
Linux学习_线程信号量
线程同步——信号量信号量概念可以以图书馆借阅和归还为类比,借阅则书目减1,归还则书目加1,若书目为0则已借阅完不可再借阅。信号量从本质上是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问。信号量可以实现线程的同步和互斥。通过sem_post()和sem_wait()函数对信号量进行加减操作从而解决线程的同步和互斥。信号量数据类型:sem_t信号量的创建和销毁#include <semaphore.h>int sem_init(sem原创 2021-05-12 00:46:44 · 231 阅读 · 0 评论 -
Linux学习_线程条件变量和状态转移图
线程同步条件变量由来和概念:互斥锁的缺点是它只有两种状态:锁定和非锁定。条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足。条件变量内部是一个等待队列,放置等待/阻塞的线程,线程在条件变量上进行等待和通知,互斥锁用来保护等待队列(对等待队列上锁),条件变量通常和互斥锁一起使用。条件变量允许线程等待特定条件发生,当条件不满足时,线程通常先进入阻塞状态,等待条件发生变化。一旦其他的某个线程改变了条件,可唤醒一个或多个阻塞的线程。具体的判断条件还需用户给出条件变量数据类原创 2021-05-10 19:22:57 · 359 阅读 · 0 评论 -
Linux学习_线程的互斥
线程的同步和互斥同步和互斥的概念线程同步线程同步是一个宏观的概念,在微观上包含线程的相互排斥(注意和线程互斥的不一样)和线程先后执行的约束问题。解决同步方式条件变量线程信号量线程互斥线程执行是相互排斥的,一个线程在操作共享资源时,其他线程是处于阻塞状态或等待状态,不可以操作共享资源。和线程同步相互排斥的区别是:线程互斥不考虑线程先后执行的约束问题。解决互斥方式互斥锁读写锁线程信号量保证同一时间操作共享资源的线程只有一个。ATM线程冲突示例创建bo原创 2021-05-08 00:08:34 · 506 阅读 · 5 评论 -
Linux学习_线程的概念创建和终止
系统线程概念和实现线程的概念概念:进程是资源管理的最小单位,线程是程序执行的最小单位每个进程有自己的数据段,代码段和堆栈段。线程通常叫做轻型的进程,它包涵独立的栈和CPU寄存器状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包括打开的文件、内存页面、信号标识及动态分配的内存等。因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。在操作系统设计上,从进程演化出线程,最主要的目的就是更好地支持多处理器,并且减小进程上下文切换的开销。进程和线程关系线原创 2021-05-03 15:49:36 · 226 阅读 · 0 评论 -
Linux学习_exec和system函数
exec函数和system函数exec函数(execute执行)1.概念在用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。不适合在父进程中调用。当进程调用一种exec函数时,该进程完全由新程序代替,替换原有进程的正文,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并不改变。exec只是用另一个新程序替换了当前进程的正文(代码)、数据、堆和栈段。2.函数原型:#include <unistd.h>int ex原创 2021-04-23 14:08:32 · 491 阅读 · 0 评论 -
Linux学习_系统进程的wait()函数
wait()函数作用:避免子进程变成僵尸进程。父进程每隔一段时间来查询子进程是否结束并回收,调用wait()或者waitpid(),通知内核释放僵尸进程。函数原型:#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status);返回:成功返回子进程ID,出错返回-1功能:等待子进程退出并回收,防止孤儿进程产生。pid_t waitpid(pid_t pid, int *status, int o原创 2021-04-23 00:01:01 · 551 阅读 · 0 评论 -
Linux学习_系统进程结构与分类
进程类型pstree查看进程树ps -ef | 想查的运行程序一、进程链和进程扇1.概念进程链:父进程只fork一个子进程,而子进程继续创建子进程,子进程变父进程后不能再创建子进程。简言之:创建进程后,判断父进程退出循环,子进程继续循环进程扇:与进程链反过来,父进程创建多个子进程,而子进程不再创建子进程。简言之:判断子进程退出循环,父进程继续循环fork2.创建进程链创建:/* * 进程链构造.c * 进程链构造 * */#include <stdio.h&g原创 2021-04-22 14:06:40 · 149 阅读 · 0 评论 -
Linux学习_系统进程的创建
进程的创建一些基础知识:什么是文件描述符表?参照stdin,stdout,stderr什么是文件表项?包含文件状态标志、当前偏移量,i-node指针,引用计数器什么是i节点? 包含文件长度、文件所有者、指向磁盘块的指针。什么是进程表项?1.进程的创建函数#include <sys/types.h>#include <unistd.h>pid_t fork(void);返回:子进程中返回0, 父进程中返回子进程ID,出错返回-1pid_t vfork(void原创 2021-04-21 21:58:38 · 466 阅读 · 0 评论 -
Linux学习_系统进程概念
系统进程概念一、进程的概念和结构1.概念:程序:程序是存放在磁盘文件中的可执行文件进程:程序的执行实例被称为进程(process)进程具有独立的权限与职责。如果系统中某个进程崩溃,他不会影响到其余进程。每个进程运行在各自的虚拟地址空间中,进程之间可以通过由内核控制的机制相互通信。进程ID每个linux进程都一定有一个唯一的数字标识符,称为进程ID(process ID),进程ID总是一个非负整数。linux内核中的文件:文件描述符表->文件表项->i节点-&g原创 2021-04-21 21:57:01 · 79 阅读 · 0 评论 -
Vim 使用
Vim 使用菜鸟教程linux vi/vim1.三种状态模式**命令模式 **按 i 进入可编程模式按 :进入末行模式x 删除当前光标所在处的字符。ZZ 保存退出ZQ 不保存退出A 定位到行末插入I 定位到行首插入- **可编辑模式** (通过ESC回到命令模式)- ```字符按键以及Shift组合,输入字符ENTER,回车键,换行BACK SPACE,退格键,删除光标前一个字符DEL,删除键,删除光标后一个字符方向键,在文本中移动光标HOME/EN原创 2021-03-13 16:22:16 · 93 阅读 · 0 评论 -
shell 命令
shell 命令菜鸟链接——shell教程一、基础1.命令基础命令历史查看history [-c清空]命令别名查看 和设置alias alias myls='ls -a'2.通配符通配符“*”:ls -l test.* #表示任意多个,全部通配符“?”:ls -l test?.? #任意1个字符ls -l test.??? ##任意3个字符“[ ]”:ls -l test[0-9].txt #范围中一个字符3.命令后台发送与作业控制命令后台运行:命令脱离命令行原创 2021-03-13 16:12:20 · 179 阅读 · 0 评论 -
linux指令操作
linux 指令linux 系统目录结构linux命令大全路径/home/.... #绝对路径,以根目录开始./ , ../ , a/b/c #相对路径,当前目录、上级目录、子目录开始. #当前目录.. #上一级目录pwd #显示当前文件夹的绝对路径#文件夹/文件 前面加‘.’,作为隐藏文件#按TAB自动补全指令格式command [option] [arguments]1. 帮助命令man [command]info [command]help [command]原创 2021-03-13 16:09:17 · 150 阅读 · 0 评论 -
linux学习
学习LINUX 需要下载的软件等:优麒麟VimGitMinicomGCCwine原创 2020-08-13 09:59:20 · 384 阅读 · 0 评论 -
Linux运行C语言文件
安装gcc工具sudo apt install gcc创建文件vim **.c完成后编译gcc **.c -o **.out运行程序./**.out原创 2020-08-12 11:39:12 · 755 阅读 · 0 评论