iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >linux系统编程(3)
  • 326
分享到

linux系统编程(3)

系统linux 2023-01-31 01:01:52 326人浏览 八月长安
摘要

一 线程间同步 同步:相互之间配合完成一件事情 互斥:保证访问共享资源的完整性(有你没我) POSIX 线程中同步:使用信号量实现 信号量 : 表示一类资源,它的值表示资源的个数 对资源访问: p操作(申请资源) [将资源的值 -

线程间同步

同步:相互之间配合完成一件事情
互斥:保证访问共享资源的完整性(有你没我)

POSIX 线程中同步:使用信号量实现

信号量 : 表示一类资源,它的值表示资源的个数

对资源访问:
p操作(申请资源) [将资源的值 - 1]
....
V操作(释放资源) [将资源的值 + 1]

1.定义信号量
sem_t  sem ;

2.初始化信号量
int sem_init(sem_t *sem, int pshared, unsigned int value);
参数:
@sem         信号量
@pshared     0:线程间使用
@value       初始化的信号量的值
返回值:
成功返回0,失败返回-1

3.P操作
int sem_wait(sem_t *sem);

4.V操作
int sem_post(sem_t *sem);

二 进程间通信(进程间数据交互)

(1)传统进程间通信方式
  [1]无名管道
  [2]有名管道
  [3]信号

(2)System 5 IPC对象进程间通信方式
  [1]消息队列
  [2]共享内存
  [3]信号灯集

(3)Socket通信

(4)Android系统中增加Binder进程间通信方式

linux 支持以上所有进程间通信方式

三 管道进程间通信

(1)无名管道
特点:
只能用于具有亲缘关系进程间通信(具有亲缘关系的进程具有数据拷贝动作(复制父进程创建子进程))

int pipe(int pipefd[2]);
功能:创建一个无名管道
参数:
@pipefd  获取操作无名管道的文件描述符  pipefd[0]:读无名管道 pipefd[1]:写无名管道
返回值:
成功返回0,失败返回-1


(2)管道读写规则 
读端存在  ,写管道 ---->只要管道没有满,都可以写入数据到管道
读端不存在,写管道 ---->此时写管道没有意义,操作系统会发送SIGPIPE杀死写管道的进程

写端存在,  读管道 ---->此时管道中读取数据,管道中没有数据,读阻塞
写端不存在,读管道 ---->此时管道中读取数据,管道中没有数据,此时不阻塞,立即返回,返回值0

(3)有名管道
特点:可以用于任意进程间通信,它是一种特殊的文件,在文件系统存在名字,
     而文件中存放的数据是在内核空间,而不是在磁盘上

1.创建一个有名管道文件
int mkfifo(const char *pathname, mode_t mode);
@pathname  有名管道存在的路径
@mode      有名管道的权限
返回值:
成功返回0,失败返回-1

2.打开有名管道文件

open

如果有名管道的一端以只读的方式打开,会阻塞,直到另一端以写(只写或读写)的方式打开
如果有名管道的一端以只写的方式打开,会阻塞,直到另一端以读(只读或读写)的方式打开


3.读写操作 
read /write

4.关闭管道文件
close(fd);


四 信号

信号是异步进程间通信方式

进程对信号的响应方式:
<1>忽略
  SIGKILL 和 SIGSTOP 不能忽略

<2>捕捉
  当进程收到信号,此时执行的信号处理函数 

<3>默认
  大部分信号对进程的默认操作方式都是杀死进程
  子进程状态发生改变的时候,操作系统向父进程发送SIGCHLD,默认对它处理方式是忽略

typedef  void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:设置进程对信号处理方式
参数:
@signum  信号的编号
@handler
 SIG_IGN : 忽略信号
 SIG_DFL : 使用默认处理方式
 函数名  : 捕捉方式处理

返回值:
成功返回handler,失败返回SIG_ERR

练习:
如何进行不阻塞,不轮训方式回收僵尸态子进程


2.在进程中设置一个定时器

unsigned int alarm(unsigned int seconds);
参数:
@seconds 定时的时间,以秒为单位

注意:
一旦定时时间完成,操作系统就会向进程发送SIGALRM信号


A进程:
读文件,写管道

A进程结束条件:文件没有数据可读

B进程:
读管道,写文件

B进程结束条件:在写端关闭,读端不阻塞,如果管道中没有数据,读管道会返回0
 


--结束END--

本文标题: linux系统编程(3)

本文链接: https://www.lsjlt.com/news/184704.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • linux系统编程(3)
    一 线程间同步 同步:相互之间配合完成一件事情 互斥:保证访问共享资源的完整性(有你没我) POSIX 线程中同步:使用信号量实现 信号量 : 表示一类资源,它的值表示资源的个数 对资源访问: p操作(申请资源) [将资源的值 -...
    99+
    2023-01-31
    系统 linux
  • Linux下C编程(3)
    创建一个能用的SOCKET是非常简单的,因为GLIBC已经为你做了很多简化工作,但是从另一个角度来说,一个通用的SOCKET不代表一个高效性能的网络应用。我们前面说到sockfd其实同真正的FD是一样的。都是LINUX下的一个打开的设备描述...
    99+
    2023-01-31
    Linux
  • linux 的文件系统 (3)
    上篇博文已经讲解了 如何对磁盘进行分区。接下来我们就在分区上创建文件系统。linux 下用 mkfs 来创建文件系统         用法 :            mkfs  -t  文件系统类型  设备名称   创建 ext3 文件系统...
    99+
    2023-01-31
    文件系统 linux
  • Linux的文件系统(3)
    本章学习目标: 掌握Linux下文件目录的属性 掌握Linux下的权限管理 掌握如何切换用户身份及权限委派       3.1文件系统简介 文件系统(File system)泛...
    99+
    2023-01-31
    文件系统 Linux
  • 初学linux系统管理3
    在多台linux主机上执行相同的命令 By tianjing on 2011 年 06 月 05 日 有时候我们需要在若干台linux主机上执行相同的命令,或者安装相同的软件,可以使用如下两种方法: 实验环境,有9台RHEL5.5...
    99+
    2023-01-31
    系统 linux
  • Linux系统编程之进程介绍
    我们平时写的 C 语言代码,通过编译器编译,最终它会成为一个可执行程序,当这个可执行程序运行起来后(没有结束之前),它就成为了一个进程。一、进程概述...
    99+
    2023-06-05
  • linux系统下udp编程实例
    以下是一个简单的UDP编程实例,用于在Linux系统上发送和接收UDP数据包。```c#include #include #incl...
    99+
    2023-09-20
    Linux
  • Linux系统编程规范有哪些
    这篇文章给大家介绍Linux系统编程规范有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.1 系统调用概述系统调用是操作系统内核提供给应用程序的基础接口,需要运行在操作系统的核心模式下,以确保有权限执行某些 CP...
    99+
    2023-06-16
  • linux shell编程学习笔记(3)
    1、什么是变量保存变化的数据——变量名:名称固定,由系统预设或用户自定义——变量值:根据用户设置、系统环境变化而变化2、如何定义变量——变量名=变量的值2.1变量名的规则(1)数字、字母、下划线(2)字母区分大小写(3)当变量名相同时,后赋...
    99+
    2023-01-31
    学习笔记 linux shell
  • 如何解析Linux系统多线程编程
    这篇文章的内容主要围绕如何解析Linux系统多线程编程进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!Linux下的多线程编程1 引言  线程(thr...
    99+
    2023-06-28
  • Linux系统编程中的网络编程基础是什么
    这篇文章主要为大家分析了Linux系统编程中的网络编程基础是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统编程中的网络编程基础是什么”的知...
    99+
    2023-06-28
  • linux之系统编码,python编码,
    如果你对python2和python3的中编解码很清楚,这里我认为你很清楚。具体参考文档:“python2 encode和decode函数说明.docx”“字符编码——从ASCII开始.docx”以上所有文档均为本地文档。sys.getde...
    99+
    2023-01-31
    系统 linux python
  • Linux系统怎么修改系统编码
    这篇文章主要介绍了Linux系统怎么修改系统编码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Windows的默认编码为GBK,Linux的默认编码为UTF-8,在Windo...
    99+
    2023-06-28
  • 高效编程必备:ASP异步编程与Linux操作系统
    在现代软件开发中,高效编程是非常重要的一个方面。ASP异步编程和Linux操作系统是两个关键技术,可以帮助开发人员更快速地开发高效的应用程序。本文将介绍ASP异步编程和Linux操作系统的基础知识,并提供一些代码示例,以帮助您更好地理解这...
    99+
    2023-11-03
    异步编程 linux 编程算法
  • 浅谈Linux环境变量与系统编程
    目录1、基本概念:2、环境变量的操作:(1)、对于环境变量的基本操作命令如下:(2)、如何使得修改长期有效,并且不会覆盖原有路径?3、环境变量与环境表:4、如何用函数来对环境变量修改?1、基本概念: 环境变量(envir...
    99+
    2023-05-06
    Linux环境变量 Linux系统编程
  • 如何分析Linux系统中的socket编程
    这篇文章跟大家分析一下“如何分析Linux系统中的socket编程”。内容详细易懂,对“如何分析Linux系统中的socket编程”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如...
    99+
    2023-06-28
  • Linux系统中Shell编程的示例分析
    这篇文章主要介绍Linux系统中Shell编程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 什么是Shell        1. 在学习Shell编程之前,我们...
    99+
    2023-06-26
  • Linux系统编程常用命令有哪些
    这篇“Linux系统编程常用命令有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux系统编程常用命令有哪些”文章吧...
    99+
    2023-06-28
  • linux如何查看系统编码和修改系统编码
    这篇文章主要介绍了linux如何查看系统编码和修改系统编码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux如何查看系统编码和修改系统编码文章都会有所收获,下面我们一起来...
    99+
    2024-04-02
  • Python异步编程和Linux操作系统有何联系?
    在软件开发的世界里,异步编程是一种非常流行的编程模式。而Linux操作系统是一个非常强大的操作系统,以其高效、稳定和可靠而闻名于世。那么,Python异步编程和Linux操作系统有什么联系呢?本文将探讨这个问题。 一、Python异步编程...
    99+
    2023-06-24
    异步编程 面试 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作