Linux应用编程
文章平均质量分 80
Linux应用编程,对进程、线程、管道、信号量以及Linux网络编程进行学习。
机器人工程师sgk
热爱一切科技事物。涉及领域包括:非标自动化设计、嵌入式软硬件开发、深度学习、人工智能等。私信进嵌入式技术交流群。
展开
-
Linux应用编程---15.并发服务器模型
并发服务器模型,之前编写的基于TCP/UDP的服务器模型只支持一个客户端访问。但实际应用过程中可能同一时刻有很多的客户端进行访问。比如12360的网站、购物网站等等。对于这种需求,提出了并发服务器的模型。 这里提出常见的两种并发服务器模型,多进程式与多线程式。前者是提前创建一定数量的进程,等待客户端与之连接,优点是与客户端的响应快速,缺点是事先不知道有多少客户端,进程创建过多造成资源浪费,进程过少,导致客户端无法正常访问。后者在有客户端连接请求后,才创建线程,在线程中处理客户端相关程序。原创 2023-01-10 17:50:58 · 270 阅读 · 3 评论 -
Linux应用编程---14.UDP服务器、客户端编程
UDP是无连接、尽最大努力交付、面向报文的通讯协议。UDP编程时,相对TCP简单,少了几个步骤。UDP编程使用socket 数据报,在建立socket时需要将流socket—SOCK_STREAM改为数据报socket—SOCK_DGRAM。原创 2023-01-10 17:48:50 · 644 阅读 · 0 评论 -
Linux应用编程---13.网络编程
网络编程要熟悉一些计算机网络有关的名词,可以先做了解,后续实际开发在深入研究,自上而下学习。与本次Linux应用编程有关的就是TCP与UDP协议。简明概念如下图1所示。 前面学习的进程间通讯的方法有:管道、共享内存、消息队列。进程间同步的方法有:信号量、互斥锁。socket也是一种进程间进行数据交互的方法,用于网络连接的不同主机上的应用层程序进行数据交互。原创 2023-01-10 17:45:06 · 1685 阅读 · 2 评论 -
Linux应用编程---12.信号
信号用于内核层与应用层、应用层与应用层之间传递控制指令。Linux下有64种信号类型。使用signal()函数可以改写信号的作用,但有的信号不支持。kill()函数可以向一个进程发送某个信号。原创 2023-01-10 17:35:52 · 208 阅读 · 0 评论 -
Linux应用编程---11.互斥锁
互斥锁是一种机制,用来保证共享资源在某一时刻只能被一个线程访问或修改,保证数据的一致性。互斥锁有两种状态,上锁和解锁。pthread_mutex_init()函数用来初始化互斥锁。 线程互斥锁有关的操作有初始化、上锁、尝试上锁、解锁、销毁互斥锁。使用相关函数时需要包含头文件pthread.h。参数mutex是一个指针,指向互斥锁的地址;参数mutexattr可以写入NULL,代表使用默认属性。原创 2023-01-10 17:32:41 · 335 阅读 · 0 评论 -
Linux应用编程---10.信号量
信号量用于任务间的同步,它本质是是一个整数被内核管理。具有亲缘关系的进程之间可以使用匿名信号量进行任务同步,非亲缘关系的进程之间使用有名信号量进行同步。原创 2023-01-10 17:22:46 · 884 阅读 · 0 评论 -
Linux应用编程---9.消息队列
消息队列可以用于亲缘关系间的进程通讯,也可以用于具有非亲缘关系间的进程之间通讯。通讯过程分为大致4步骤:1 创建消息队列结构体,使用msgget()创建消息队列;2 使用msgsnd()发送填充过数据的消息队列结构体;3 使用msgrcv()函数接收;4 如果不在使用,则使用msgctl()函数删除创建的消息队列。原创 2023-01-08 17:08:22 · 855 阅读 · 0 评论 -
Linux应用编程---8.共享内存
共享内存是进程之间通讯的方式之一,建立共享内存大概分为几步:(1)使用shmget()创建共享内存段;(2)使用shmat()将共享内存段与当前进程绑定;(3)使用shmdt()函数将共享内存与进程断开连接;(4)如需彻底销毁共享内存段,调用shmctl(),传入IPC_RMID。原创 2023-01-08 17:01:32 · 1366 阅读 · 2 评论 -
Linux应用编程---7.有名管道
有名管道用于非亲缘关系的进程之间通讯,通过创建一种特殊的先入先出文件。用到的库函数是mkfifo(),函数原型为:int mkfifo(const char * pathname, mode_t mode);pathname是有名管道的文件路径名,mode是该有名管道的权限。返回值0:成功;-1:失败。原创 2023-01-08 16:58:05 · 1241 阅读 · 0 评论 -
Linux应用编程---6.无名管道
管道用于进程之间通讯,管道又分为有名管道和无名管道。管道是单向的,创建管道用函数pipe(),需要传入一个数组int fd[2],有2个元素,元素类型是整形。其中,fd[0]是管道读取端, fd[1]是管道写入端。它两叫做文件通配符,可以使用函数close()与write()进行操作。原创 2023-01-08 16:55:21 · 559 阅读 · 0 评论 -
Linux应用编程---5.多线程的创建以及线程间数据共享
本次了解了多线程的创建方式,本质还是通过多次调用线程创建函数实现的。线程之间资源贡献,所以对于一个全局变量在多线程之间是可见的,通过这个特点,多线程也更好实现线程之间的通讯。原创 2023-01-08 16:51:59 · 787 阅读 · 0 评论 -
Linux应用编程---4.pthread_create函数
线程创建函数:pthread_create,以及它的入参的含义。线程是从属于进程的,进程结束线程也随之结束。阻塞式等待线程结束可以调用pthread_join()函数。运行结果 我们定义了int型变量count,然后在pthread_create(&thread, NULL, thread_function, &count);中将其地址传入,在线程函数内,这个值被取出,并参与了循环终止条件的判断。根据结果来看,运行是正确的。 线程创建函数:pthread_create,以及它的入参的含义。原创 2023-01-08 16:46:33 · 2544 阅读 · 0 评论 -
Linux应用编程---3.wait()函数
wait()函数用来等待进程结束,或者说是进程状态改变,属于阻塞式等待。如果等待到子进程终止,返回该进程的id,如果函数调用失败,则返回-1。linux终端下可以向main函数传参,也就是声明main函数时,入口写为这样:int main(int * argc, char *argv[])。其中,argc代表入参的个数,argv代表入参。原创 2023-01-08 16:42:22 · 1293 阅读 · 0 评论 -
Linux应用编程---2.fork()函数
fork()函数用来创建子进程,函数具体功能与使用方法一起看编程手册。Linux终端命令下输入:man fork,敲击回车键即可打开fork函数详情页。首先看SYNOPSIS: 我们可以知道调用fork函数所需的头文件,以及fork函数的函数原型。pid_t fork(void).这个函数不需要传参,返回值是一个pid_t类型的。 其次看具体描述: 大意试讲,fork()函数通过拷贝调用进程创建了一个新的进程。这个新的进程被称作子进程,这个调用进程被称作父进程。子进程和父进程运行在独立的原创 2023-01-08 16:37:47 · 625 阅读 · 0 评论 -
Linux应用编程---1.线程与进程
Linux应用编程中线程与进程是两个非常重要的概念,本次我们先熟悉了如何查看进程id号以及父进程id号两个函数。原创 2023-01-08 16:31:58 · 360 阅读 · 0 评论 -
Linux应用编程---0.写在开头与致谢
学习嵌入式Linux应用编程,具有的基础是熟练掌握C语言编程,熟悉Ubuntu系统下的简单操作命令以及gcc编译、vim编辑器的使用。学习重点在于认识linux应用编程、体会在linux系统下的应用编程。 学习过程是基于该教程的授课体系,听完老师的视频讲解后,独立进行API函数查阅、编程、debug…原创 2023-01-08 16:27:15 · 139 阅读 · 0 评论