数据交换和异步请求(JSONAjax))

news2024/10/3 22:24:22

目录

  • 一.JSON介绍
    • 1.JSON的特点
    • 2.JSON的结构
    • 3.JSON的值
    • JSON示例
    • 4.JSON与字符串对象转换
    • 5.注意事项
  • 二.JSON在Java中的使用
    • 1.Javabean to json
    • 2.List to json
    • 3.Map to JSON
    • TypeToken底层解析
  • 三.Ajax介绍
    • 1.介绍
    • 2.Ajax经典应用场景
  • 四.Ajax原理示意图
    • 1. 传统web应用
    • 2.Ajax方法
  • 五.Ajax实例
    • JavaScript原生Ajax请求方法
      • 实例代码
      • 原生Ajax问题分析
    • JQuery的Ajax请求方法
      • 常用方法
      • 实例代码

一.JSON介绍

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机制造商协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。

1.JSON的特点

  • 易于人阅读和编写:JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
  • 易于机器解析和生成:有效地提升网络传输效率。
  • 轻量级的数据交换格式:相对于XML格式的数据,JSON格式的数据体积小、传输效率高。

2.JSON的结构

JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。
值的有序列表(An ordered list of values)。
在多数语言中,它被理解为数组(array)。

3.JSON的值

在JSON中,值(value)可以是:

  • 字符串(在双引号中)
  • 数字(整数或浮点数)
  • 对象(在花括号中)
  • 数组(在方括号中)
  • true/false/null

JSON示例

{  
  "name": "John",  
  "age": 30,  
  "car": null,  
  "hobbies": ["reading", "cinema", "swimming"],  
  "spouse": {  
    "name": "Jane",  
    "age": 28  
  }  
}
//这个JSON对象表示一个人,他有名字、年龄、没有车、有一些爱好,以及一个配偶对象,
//配偶对象也有自己的名字和年龄。

4.JSON与字符串对象转换

  1. JSON.stringify(json)功能: 将一个json对象转换成为 json 字符串
  2. JSON.parse( jsonString )功能: 将一个 json字符串转换成为 json

实例

// 一个 json 对象
var jsonObj = {"name": "leon", age: 10};
//JSON 是一个 build-in 对象,内建对象,有方法可以使用
console.log(JSON)
// 把 json 对象转换成为字符串对象
var jsonStr = JSON.stringify(jsonObj);
console.log(jsonStr);
// 把 json 对象的字符串,转换成为 json 对象
var jsonObj2 = JSON.parse(jsonStr);
console.log(jsonObj2);

5.注意事项

  1. JSON.springify(json 对 象)会返回对应 string, 并不会影响原来json对象
  2. JSON.parse(string) 函数会返回对应的 json 对象, 并不会影响原来 string
  3. 在定义 Json 对象时, 可以使用 ’ ’ 表示字符串,
    比如 var json_person = {“name”: “jack”, “age”: 100};
    也可以写成 var json_person = {‘name’: ‘jack’, ‘age’: 100};
  4. 但是在把原生字符串转成 json 对象时, 必须使用 “”, 否则会报错 比如:
    var str_dog = “{‘name’:‘小黄狗’, ‘age’: 4}”; 转 json 就会报错
  5. JSON.springify(json 对象) 返回的字符串, 都是 “” 表示的字符串, 所以在语法格式正确的情况下, 是可以重新转成 json 对象的.

二.JSON在Java中的使用

Java中使用JSON需要导入第三方包gson.jar
Gson是谷歌提供的用来在Java对象和json数组之间转化的Java类库

1.Javabean to json

class Book {
    private Integer id;
    private String name;

    public Book(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

//创建一个gson对象,做完一个工具对象使用
        Gson gson = new Gson();

        //演示javabean 和 json字符串的转换
        Book book = new Book(0824, "Java之父科比");

        //1. 演示把javebean -> json字符串
        String strBook = gson.toJson(book);
        System.out.println("strBook=" + strBook);
        //2. json字符串->javabean
        //(1) strBook 就是 json字符串
        //(2) Book.class 指定将 json字符串转成 Book对象
        //(3) 底层是反射机制
        Book book2 = gson.fromJson(strBook, Book.class);
        System.out.println("book2=" + book2);

2.List to json

List<Book> bookList = new ArrayList<>();
        bookList.add(new Book(200, "天龙八部"));
        bookList.add(new Book(300, "三国演义"));

        //把对象,集合转成字符串, 相对比较简单
        //底层只需要遍历, 按照json格式拼接返回即可
        String strBookList = gson.toJson(bookList);
        System.out.println("strBookList= " + strBookList);
        
Type type = new TypeToken<List<Book>>() {
        }.getType();

        List<Book> bookList2 = gson.fromJson(strBookList, type);
        System.out.println("bookList2= " + bookList2);

3.Map to JSON

Map<String, Book> bookMap = new HashMap<>();
        bookMap.put("k1", new Book(400, "射雕英雄传"));
        bookMap.put("k2", new Book(500, "西游记"));

        String strBookMap = gson.toJson(bookMap);
        System.out.println("strBookMap=" + strBookMap);

        //   new TypeToken<Map<String, Book>>() {}.getType()=> java.util.Map<java....String,com.hspedu.json.Book>
        Map<String, Book> bookMap2 = gson.fromJson(strBookMap,
                new TypeToken<Map<String, Book>>() {
                }.getType());
        System.out.println("bookMap2=" + bookMap2);

TypeToken底层解析

(1) 如果需要把json字符串 转成 集合这样复杂的类型, 需要使用gson提供的一个类
(2) TypeToken , 是一个自定义泛型类, 然后通过TypeToken来指定我们需要转换成的类型
 com.google.gson.reflect

  public class TypeToken<T> {
      final Class<? super T> rawType;
      final Type type;
      final int hashCode;

      protected TypeToken() {
          this.type = getSuperclassTypeParameter(this.getClass());
          this.rawType = Types.getRawType(this.type);
          this.hashCode = this.type.hashCode();
      }
    (1) 返回类型的完整路径java.util.List<com.javalearn.Book>
    (2) gson的设计者,需要得到类型的完整路径,然后进行底层反射
    (3) 所以gson 设计者就提供TypeToken, 来搞定.

    为什么要加 {}?

    (1) 如果我们  new TypeToken<List<Book>>()  提示
     'TypeToken()' has protected access in 'com.google.gson.reflect.TypeToken'
    (2) 因为TypeToken 的无参构造器是protected , 而 new TypeToken<List<Book>>() 就是调用其无参构造器
    (3) 根据java语法, 如果一个方法是protected ,而且不在同一个包, 是不能直接访问的, 因此报错
    (4) 为什么 new TypeToken<List<Book>>(){} 使用就可以,这里就涉及到匿名内部类的知识.
    (5) 当 new TypeToken<List<Book>>(){} 其实这个类型就是不是 TypeToken 而是一个匿名内部类(子类)
    (6) 而且这个匿名内部类是有自己的无参构造器(隐式), 根据java基础规则 当执行子类的无参构造器时, 默认super();

三.Ajax介绍

1.介绍

Ajax是一种用于创建交互式网页应用程序的技术。Ajax全称为Asynchronous JavaScript and XML(异步JavaScript和XML),它利用JavaScript、XML、HTML和CSS等技术,通过在后台与服务器进行数据交换,实现网页的局部刷新,从而实现页面的动态加载和更新,提升用户体验。

2.Ajax经典应用场景

  1. 搜索引擎根据用户输入关键字,自动提示检索关键字
  2. 动态加载数据,按需取得数据【树形菜单、联动菜单…】
  3. 改善用户体验。【输入内容前提示、带进度条文件上传…】
  4. 电子商务应用。 【购物车、邮件订阅…】
  5. 访问第三方服务。【访问搜索服务、rss 阅读器】

四.Ajax原理示意图

1. 传统web应用

在这里插入图片描述

2.Ajax方法

在这里插入图片描述

五.Ajax实例

JavaScript原生Ajax请求方法

实例代码

js

 window.onload = function () { //页面加载后执行function
      var checkButton = document.getElementById("checkButton");
      //给checkButton绑定onclick
      checkButton.onclick = function () {

        //1. 创建XMLHttpRequest对象(!!!) [ajax引擎对象]
        var xhr = new XMLHttpRequest();
        //   获取用户填写的用户名
        var uname = document.getElementById("uname").value;

        //2. 准备发送指定数据 open, send
        //(1)"GET" 请求方式可以 GET/POST
        //(2)"/ajax/checkUserServlet?username=" + uname 就是 url
        //(3)true , 表示异步发送
        xhr.open("GET", "/Ajax/checkUserServlet?uname=" + uname, true);

        //在send函数调用前,给XMLHttpRequest 绑定一个事件onreadystatechange
        //该事件表示,可以去指定一个函数,当数据变化,会触发onreadystatechange
        // 每当 xhr对象readyState 改变时,就会触发 onreadystatechange 事件
        xhr.onreadystatechange=function (){
          if(xhr.status==200&&xhr.readyState==4){
            console.log(xhr.responseText)
            if(xhr.responseText!=""){
              document.getElementById("div1").innerText=xhr.responseText
              document.getElementById("myres").value="用户名 "+uname+" 已存在"
            }else{
              document.getElementById("myres").value="用户名 "+uname+" 可用"
            }
          }
        }

        //3. 真正的发送ajax请求[http请求]
        //如果你POST 请求,再send("发送的数据")
        xhr.send();


      }
    }

html

<body>
<h1>register</h1>
<form action="/Ajax/checkUserServlet" method="post">
  name:<input type="text" name="username" id="uname">
  <input type="button" id="checkButton" value="验证用户名">
  <input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>
   pwd :<input type="password" name="password"><br/><br/>
  email:<input type="text" name="email"><br/><br/>
  <input type="submit" value="用户注册">
</form>
<h1>Json data</h1>
<div id="div1"></div>
</body>

servlet

	package servlet; /**
 * Date:2024/4/28  22:15
 * Description:TODO
 *
 * @author Leon
 * @version 1.0
 */

import com.google.gson.Gson;
import entity.User;
import service.UserService;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class CheckUserServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //System.out.println("CheckUserServlet 被调用....");

        UserService userService = new UserService();
        Gson gson = new Gson();

        //接收ajax提交的数据
        String uname = request.getParameter("uname");
        System.out.println("uname= " + uname);

        response.setContentType("text/html;charset=utf-8");

        User user = userService.getUserByName(uname);
        if (user != null) {//说明用户名存在..,返回该user的json格式数据字符串
            String strUser = gson.toJson(user);
            response.getWriter().write(strUser);

        } else {
            response.getWriter().write("");
        }


        假定用户名为 king , 就不可用, 其它用户名可以
        //if("king".equals(uname)) {//不能使用king用户名
        //    //后面这个信息,是从DB获取
        //    //User king = new User(100, "king", "666", "king@sohu.com");
        //
        //    //从DB获取
        //    User king = userService.getUserByName("king");
        //    //把 king 转成 json字符串
        //    String strKing = new Gson().toJson(king);
        //    //返回
        //    response.getWriter().write(strKing);
        //} else {
        //    //如果用户名可以用,返回""
        //    response.getWriter().write("");
        //}

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

原生Ajax问题分析

  1. 编写原生的 Ajax 要写很多的代码,还要考虑浏览器兼容问题,使用不方便。
  2. 在实际工作中,一般使用 JavaScript 的库(比如 Jquery) 发送 Ajax 请求,从而解决这个问题

JQuery的Ajax请求方法

常用方法

  1. $.ajax 常用参数
    url: 请求的地址
    type : 请求的方式 get 或 post
    data : 发送到服务器的数据。将自动转换为请求字符串格式
    success: 成功的回调函数
    error: 失败后的回调函数
    dataType: 返回的数据类型 常用 json 或 text
  2. $.get 和 $.post 常用参数
    url: 请求的 URL 地址
    data: 请求发送到服务器的数据
    success: 成功时回调函数
    type: 返回内容格式,xml, html, script, json, text
  3. $.getJSON 常用参数
    url: 请求发送的哪个 URL
    data: 请求发送到服务器的数据
    success: 请求成功时运行的函数

底层都是$.ajax方法

实例代码

js

$(function () {
            $("#checkButton").click(function () {
                // $.ajax({
                //   url:"/Ajax/checkUserServletPlus",
                //   type:"POST",
                //   data:{
                //     uname:$("#uname").val(),
                //     date: new Date()
                //   },
                //   error:function (){
                //     console.log("error")
                //   },
                //   success:function (data,status,xhr){
                //     console.log("success")
                //
                //     console.log("data="+data)
                //     console.log("status="+status)
                //     console.log("xhr="+ xhr)
                //     $("#div1").html(JSON.stringify(data))
                //     if(data.id==-1){
                //       $("#myres").val("该用户未注册")
                //     }else{
                //       $("#myres").val("该用户已存在")
                //     }
                //   },
                //   dataType:"json"
                // })
                // $.get(
                //     "/Ajax/checkUserServletPlus",
                //     {
                //         uname: $("#uname").val(),
                //         date: new Date()
                //     }, function (data, status, xhr) {
                //         $("#div1").html(JSON.stringify(data))
                //         if (data.id == -1) {
                //             $("#myres").val("该用户未注册")
                //         } else {
                //             $("#myres").val("该用户已存在")
                //         }
                //     },
                //     "json"
                // )

                // $.post(
                //     "/Ajax/checkUserServletPlus",
                //     {
                //         uname: $("#uname").val(),
                //         date: new Date()
                //     }, function (data, status, xhr) {
                //         $("#div1").html(JSON.stringify(data))
                //         if (data.id == -1) {
                //             $("#myres").val("该用户未注册")
                //         } else {
                //             $("#myres").val("该用户已存在")
                //         }
                //     },
                //     "json"
                // )

                $.getJSON(
                    "/Ajax/checkUserServletPlus",
                    {
                        uname: $("#uname").val(),
                        date: new Date()
                    }, function (data, status, xhr) {
                        $("#div1").html(JSON.stringify(data))
                        if (data.id == -1) {
                            $("#myres").val("该用户未注册")
                        } else {
                            $("#myres").val("该用户已存在")
                        }
                    }
                )
            })
        })

html

<h1>register</h1>
<form action="/Ajax/checkUserServletPlus" method="post">
    name:<input type="text" name="username" id="uname">
    <input type="button" id="checkButton" value="验证用户名">
    <input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>
    pwd :<input type="password" name="password"><br/><br/>
    email:<input type="text" name="email"><br/><br/>
    <input type="submit" value="用户注册">
</form>
<h1>Json data</h1>
<div id="div1"></div>

servlet

package servlet; /**
 * Date:2024/4/29  21:17
 * Description:TODO
 *
 * @author Leon
 * @version 1.0
 */

import com.google.gson.Gson;
import entity.User;
import service.UserService;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class CheckUserServletPlus extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        UserService userService = new UserService();
        Gson gson = new Gson();

        //接收ajax提交的数据
        String uname = request.getParameter("uname");
        System.out.println("uname= " + uname);

        response.setContentType("text/json;charset=utf-8");

        User user = userService.getUserByName(uname);
        if (user != null) {//说明用户名存在..,返回该user的json格式数据字符串
            String strUser = gson.toJson(user);
            response.getWriter().write(strUser);

        } else {
            User nullU = new User(-1, "", "", "");
            response.getWriter().write(gson.toJson(nullU));
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1649959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪吃蛇大作战(C语言--实战项目)

朋友们&#xff01;好久不见。经过一段时间的沉淀&#xff0c;我这篇文章来和大家分享贪吃蛇大作战这个游戏是怎么实现的。 &#xff08;一&#xff09;.贪吃蛇背景了解及效果展示 首先相信贪吃蛇游戏绝对称的上是我们00后的童年&#xff0c;不仅是贪吃蛇还有俄罗斯⽅块&…

YAML如何操作Kubernetes核心对象

Pod Kubernetes 最核心对象Pod Pod 是对容器的“打包”&#xff0c;里面的容器&#xff08;多个容器&#xff09;是一个整体&#xff0c;总是能够一起调度、一起运行&#xff0c;绝不会出现分离的情况&#xff0c;而且 Pod 属于 Kubernetes&#xff0c;可以在不触碰下层容器的…

Day 63:单调栈 LeedCode 84.柱状图中最大的矩形

84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&a…

Linux系统使用Docker安装青龙面板并实现远程访问管理面板

文章目录 一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 青龙…

Codeforces Round 942 (Div. 2) A-D1

题目&#xff1a; Codeforces Round 942 (Div. 2) D2有缘再补吧… A. Contest Proposal 题意 两个升序&#xff08;不降&#xff09;的序列a和b&#xff0c;可以在a的任意位置插入任意数&#xff08;要保持升序&#xff09;&#xff0c;使对任意i&#xff0c;有a[i] < b[…

ENVI下实现遥感矿物蚀变信息提取

蚀变岩石是在热液作用影响下&#xff0c;使矿物成分、化学成分、结构、构造等发生变化的岩石。由于它们经常见于热液矿床的周围&#xff0c;因此被称为蚀变围岩&#xff0c;蚀变围岩是一种重要的找矿标志。利用围岩蚀变现象作为找矿标志已有数百年历史&#xff0c;发现的大型金…

ldap对接jenkins

ldap结构 配置 - jenkins进入到 系统管理–>全局安全配置 - 安全域 选择ldap - 配置ldap服务器地址&#xff0c;和配置ldap顶层唯一标识名 配置用户搜索路径 - 配置管理员DN和密码 测试认证是否OK

Java | Leetcode Java题解之58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthOfLastWord(String s) {int index s.length() - 1;while (s.charAt(index) ) {index--;}int wordLength 0;while (index > 0 && s.charAt(index) ! ) {wordLength;index--;}return wordL…

《设计一款蓝牙热敏打印机》

主控芯片用易兆威蓝牙ic&#xff0c;通讯接口&#xff1a;蓝牙、串口、usb 安卓apk用java kotlin编写、上位机用Qt编写。

基于51单片机的自动售货机系统

一、项目概述 本文设计了一款以AT89C51单片机为核心的自动售货机系统&#xff0c;并且着重详细地介绍了自动售货机的整体系统设计方案、硬件选择基础、软件使用方法及技巧。 以AT89C51作为CPU处理单元连接各个功能模块&#xff1b;以44矩阵键盘作为输入控制模块对货物进行种类…

一文了解栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈是什么&#xff1f;二、栈的实现思路1.顺序表实现2.单链表实现3.双向链表实现 三、接口函数的实现1.栈的定义2.栈的初始化3.栈的销毁4.入栈5.出栈6.返回栈…

爆赞好文之java反序列化之CB超详细易懂分析

java反序列化之CB超详细易懂分析 CB1环境搭建前言分析PropertyUtilsBeanComparatorPriorityQueue CB2环境搭建前言exp CB1 环境搭建 pom.xml <dependencies><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils&l…

回归预测 | Matlab实现基于CNN-SE-Attention-ITCN多特征输入回归组合预测算法

回归预测 | Matlab实现基于CNN-SE-Attention-ITCN多特征输入回归组合预测算法 目录 回归预测 | Matlab实现基于CNN-SE-Attention-ITCN多特征输入回归组合预测算法预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【模型简介】CNN-SE_Attention结合了卷积神经网络&#xff…

12V系统车灯电源口浪涌过压防护方案及保护器件选型推荐

12V系统车灯驱动电源口浪涌过压防护方案图 12V系统车灯驱动电源口浪涌过压防护方案详解 从图中可知&#xff0c;方案针对车灯驱动电路电源输入口的浪涌过压保护。在车载12V系统中&#xff0c;电源线上面的瞬态浪涌主要来源于抛负载。在12V系统车灯驱动电源输入端&#xff0c;东…

Scroll生态项目Penpad,再获Presto Labs的投资

Penpad是Scroll生态的LaunchPad平台&#xff0c;其整计划像收益聚合器以及RWA等功能于一体的综合性Web3平台拓展&#xff0c;该平台在近期频获资本市场关注&#xff0c;并获得了多个知名投资者/投资机构的支持。 截止到本文发布前&#xff0c;Penpad已经获得了包括Scroll联合创…

6.移除元素

文章目录 题目简介题目解答解法一&#xff1a;双指针代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;双指针优化代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 相关的讲解&#xff01;&#x1f600; 题目简…

【计组OS】访存过程以及存储层次化结构

苏泽 本专栏纯个人笔记作用 用于记录408 学习的笔记记录&#xff08;敲了两年码实在不习惯手写笔记了&#xff09; 如果能帮助到大家当然最好 但由于是工作后退下来备考 很多说法和想法都会结合实际开发的思想 可能不是那么的纯粹应试哈 希望大家挑选自己喜欢的口味食用…

语音识别--光谱门控降噪

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计7267字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

QT程序简单国际化实验

文章目录 第一步&#xff1a;新建一个QT工程第二步&#xff1a;添加控件第三步&#xff1a;在pro文件中添加内容第四步&#xff1a;更新文件第五步&#xff1a;打开QT的Linguist第六步&#xff1a;添加翻译内容第七步&#xff1a;回到QT Creator中添加文件第八步&#xff1a;给…

Linux 进程间通信之共享内存

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; ​ 目录 ​编辑​ 前言 共享内存直接原理…