Linux高级编程
文章平均质量分 64
琛翀
嵌入式领域小白一枚
展开
-
Linux高级编程——数据库(触发器、导入导出、C语言调用)
触发器Trigger在发生某个事件,或满足某个条件时自动被执行的存储过程。三种不同粒度的触发器:表级:动表n次触发n次行级:动行n次触发n次列级:动列n次触发n次创建mysql> delimiter #mysql> create trigger t_so after insert on score/*在score表中设置一个触发器*/ -> for each row -> begin -> update score se原创 2022-03-23 09:29:56 · 1204 阅读 · 0 评论 -
Linux高级编程——数据库(事务、视图、索引、存储、函数)
子查询:即嵌套查询,就是将一条 SELECT 语句的执行结果当作一个单值、集合或临时表参与另外一个 SELECT 查询。where:对笛卡尔集进行筛选,having是对分组后的表进行筛选;AOTU_INCREMENT设置字段自动递增特性时,其字段必须为key,新增插入时,会以表中最大值为基础+1事务控制所谓事物,就是一系列数据库操作,但是它们具有原子性。要么全部成功完成,要么啥操作都没有做。事务的四大特性:ACID原子性(Atomicity)一致性(Consistency)隔离性(Iso原创 2022-03-19 19:16:57 · 548 阅读 · 0 评论 -
Linux高级编程——数据库(表操作)
在数据库中创建表,并进行 CRUD 操作。在库中进行表操作,先use 库名进入库提示Database changed创建一个表:mysql> CREATE TABLE student( -> sno INT UNSIGNED, -> name VARCHAR(20), -> sex CHAR, -> sight FLOAT(2,1), -> birth DATE, -> phone CHAR(11)-> );查看表:mysql>原创 2022-03-18 22:06:53 · 1118 阅读 · 1 评论 -
Linux高级编程——数据库(安装、创建、删除)
数据库(Database)存放和管理数据的仓库,用于管理大量或海量数据。少量数据请使用文件存放和管理,但是对于大量数据,使用数据库将更加方便。数据库管理系统(Database Management System,DBMS),简称数据库(DB)。如果不用数据库:Program <---------> File如果使用数据库:Program <---------> DBMS <--------->File数据库管理系统分为:关系型数据库管理系统(Relatio原创 2022-03-18 22:02:01 · 710 阅读 · 0 评论 -
Linux高级编程——网络通信UDP
基于 UDP 协议的通信User Datagram Protocol,用户数据报协议。UDP 协议是无连接,传输不可靠(尽力而为),但传输效率很高。UDP 协议传输不可靠:内部没有流量和拥塞控制机制,一旦接收方缓冲区满,它不会通知和阻塞发送方,就会发生丢包。由于接受不会对接收的数据包进行排序处理,只是简单的按照数据包的到达顺序接收处理,所以可能会发生乱序问题。UDP 协议不存在粘包问题,因为它是严格以数据包为单位进行手法处理的。UDP 协议支持空数据包,可以用作通知或心跳包(或保活)。U原创 2022-03-17 10:33:10 · 4031 阅读 · 0 评论 -
Linux高级编程——项目版本管理git
项目版本管理主流项目版本管理工具:git:分布式的项目版本管理工具svn:集中式的项目版本管理工具基于 git 项目代码托管平台:gitee:国内的码云;github:国外的,号称"全球最大的程序员同性交友社区";基于 gitlab 开源项目可以轻松搭建一个像 github/gitee 这样的网站安装git sudo apt install git创建工程目录 mkdir s_mgr创建 git 创库 git init提交至暂存区git add 文件名 文件名,git status(原创 2022-03-14 23:18:33 · 213 阅读 · 0 评论 -
Linux高级编程——网络通信实现TCP(2)
为解决TCP协议中的粘包问题,提供以下实例说明:需结合注释里的内容,原理请参考网络通信(1)客户端#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include原创 2022-03-14 22:57:05 · 2816 阅读 · 0 评论 -
Linux高级编程——网络通信实现TCP(1)
基于TCP协议的文件传输(套接字)实例:客户端:只用于收文件;执行命令:./执行文件名 IP Port// 客户端 输入 ./执行文件 IP Port#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/socket.h>#include <原创 2022-03-14 22:53:00 · 2924 阅读 · 0 评论 -
Linux高级编程——TCP(套接字)(双向通信、文件传输)
网络通信编程实现基于 TCP 协议的通信TCP:Transmission Control Protocol,传输控制协议,传输层的一个非常重要的协议,负责数据传送。面向连接、传输可靠、但通信效率较低。基于 TCP 通常采用 C/S 模式,即客户端(Client)/服务器(Server)模式,客户端程序和服务器端程序的实现不一样,它们是不对等的。每次通信都是由客户端主动发起(即连接服务器),服务器端被动参与通信(即接收客户端的连接请求)。基于 TCP 协议通信的过程如同打电话的通信过程。TCP 服务原创 2022-03-12 09:40:59 · 3196 阅读 · 0 评论 -
Linux高级编程——网络通信
计算机网络通信技术即套接字(Socket)通信编程技术常识:三大通信网络:电信网络计算机网络:建设成本极低,开放式。有线电视网络根据计算机网络的覆盖范围大小,分为局域网(Lock Area Newwork,简称LAN)、城域网、广域网、互联网(Internet)。IP 地址:Internet Protocol Address,用来标识一台机器在计算机网络世界中的地址。有两种版本:IPv4 和 IPv6,IPv4使用 32 位的无符号整数表示地址,通常采用四段点分式记法,每一段的范围为原创 2022-03-12 09:38:58 · 3072 阅读 · 0 评论 -
Linux高级编程——多线程控制(读写锁、自旋锁、条件变量)
读写锁(RW Lock)实现 "读操作允许并发执行、写操作只允许互斥执行、读和写操作只允许互斥执行"的同步控制效果。pthread_rwlock_wrlock 写锁pthread_rwlock_rdlock 读锁读写锁特性:读锁共享,写锁互斥、写锁优先写写互斥,读写互斥,读读共享#include <stdio.h>#include <time.h>#include <stdlib.h>#include <sys/types.h>#inclu原创 2022-03-10 09:06:24 · 197 阅读 · 0 评论 -
Linux高级编程——多线程控制(互斥锁、信号量)
多线程同步控制常用的同步控制方法:互斥锁(Mutex)信号量(Semaphore)条件变量(Condition Variable)读写锁(Read-Write Lock)自旋锁(Spin Lock)互斥锁多个线程对某个只能独占使用的资源进行互斥访问可以使用互斥锁。当某个线程调用 pthread_mutex_lock 函数时:如果互斥锁已经处于锁定状态,该函数会阻塞调用线程的执行,直到其他线程解锁才可能从 pthread_mutex_lock 函数返回继续往下执行。如果互斥锁处于未原创 2022-03-08 19:58:29 · 507 阅读 · 0 评论 -
Linux高级编程——线程(2)
结束线程方法:线程返回调用 pthread_exit 函数(自杀)调用 pthread_cancel 函数(他杀)当所杀的线程内调用了pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);则调用pthread_cancel 函数没有作用pthread_setcancelstate意为对Cancel信号的反应(disable表忽略)调用一个全局变量注意:在 main 函数中,return 语句和 pthread_exit原创 2022-03-08 19:54:57 · 528 阅读 · 0 评论 -
Linux高级编程——线程
线程进程内部的一条执行路径。多任务并发:同一进程创建多个线程并发处理。线程属于进程,一个进程内部可以拥有多个线程,至少有一个线程,这个线程称为主线程(Main Thread);一个线程只能属于某个进程,不可能属于多个进程。同一个进程的所有线程共享该进程的所有资源,所以通信非常容易实现。线程是操作系统调度执行的基本单位,负责执行代码;进程是操作系统分配资源的基本单位;操作系统通过线程 ID 标识不同的线程。(pthread)操作系统中的所有线程分时复用 CPU ,并发执行。由于线程调度原创 2022-03-08 00:05:08 · 497 阅读 · 0 评论 -
Linux高级编程——进程通信(共享内存、消息队列)
共享内存(Shared Memory)多个进程可以共享访问的一段内存空间,最快的 IPC 方式。生命周期:如果不删除,与内核相同,关机即消失。相关的系统调用:shmget:创建或获取一段共享内存空间。shmat:将共享内存映射到当前进程的私有虚拟地址空间shmdt:取消共享内存映射;shmctl:对共享内存进行各种控制,比如删除等;查询系统所有共享内存段信息ipcs -m删除系统中某个共享内存段ipcrm -m shmid(共享内存段id)shmgetshmget(key_原创 2022-03-04 16:02:16 · 1150 阅读 · 0 评论 -
Linux高级编程——进程通信(管道pipe)
管道(Pipe)——特殊文件同步实现同一台机器上的两个进程之间同步传输大量数据。int pipe(int pipefd[2]);[0]为读,[1]为写管道分为两种:匿名管道(只能用于具有亲缘关系的进程间通信)命名管道(就是磁盘上的一个特殊文件,任何知道该文件路径的进程都可以使用它进行通信)mkfifo 管道名上述命名创建一个以管道名而生成的命名管道文件,类型为p;若使用cat 读取文件内容,此时,该文件则会清空;管道只要有人读取数据,则读取到的数据在管道中直接消失,全部读完则管原创 2022-03-04 09:53:07 · 444 阅读 · 0 评论 -
Linux高级编程——进程通信(信号signal)
进程间通信(IPC,Inter-Process Communication)两个或多个进程间进行数据传送,参与通信的这些进程可能位于同一台机器上,也可能位于不同的机器上。常用 IPC 方式:信号(Signal)管道(Pipe)共享内存(Shared Memory)消息队列(Message Queue)套接字(Socket)信号(Signal)Linux 系统上古老经典的 IPC方式,主要用于实现异步通知,不能传输数据。信号是一种软件中断(Software Break)void (*原创 2022-03-04 09:49:08 · 1598 阅读 · 0 评论 -
Linux高级编程——进程
进程就是正在运行的程序,或程序的一次执行过程。通过同一程序可以产生多个进程(即所谓的多开)。操作系统(Operating System,简称OS)会给每个进程分配一个不同的整数编号(大于或等于1),这个编号就是所谓的PID(Process Identification,进程 ID),操作系统就是通过 PID区分和管理不同的进程。进程是操作系统分配资源(PID、私有地址空间)的基本单位。一旦进程结束后,操作系统会自动回收进程所有的资源。系统中的所有进程可以并发或并行执行。特点:多任务并发,高并发。原创 2022-03-03 09:12:52 · 584 阅读 · 0 评论 -
Linux高级编程——文件系统管理
文件系统管理 如果说将文件系统看成树形结构,那么文件夹就是分支节点,文件就是叶子节点。Linux系统调用(System Call):就是 Linux 系统提供的一堆函数,只能用于 Linux 系统/Unix系统。操作系统源码:https://www.kernel.org/文件 I/O 相关函数:open:打开文件,如果成功就返回一个文件描述符(File Descriptor,就是一个非负整数,范围为:0 ~65535)close:关闭文件readwritelseek:文件指针位置,可原创 2022-02-25 17:30:50 · 595 阅读 · 0 评论 -
Linux高级编程——库
Linux 高级编程库(Library)库分为:源码库静态库:也称为静态链接库(Static Link Library)动态库:也称为共享库(Shared Library)、动态链接库(Dynamic Link Library)通过源码库可以实现源代码级别的复用,通过静态库或共享库可以实现二进制级别的复用(保护自己的源代码)制作静态库文件的步骤:将相关源文件(.c)编译为对应的目标文件(.o),使用 gcc -c 源文件名称 命令将上一步得到的所有目标文件打包为静态库,使用 ar -原创 2022-02-24 19:01:49 · 206 阅读 · 0 评论