当前位置: 首页 > news >正文

嵌入式学习day26 Linux

1.exec函数族
    extern char **environ;

    int execl(const char *path, const char *arg, ...
                    /* (char  *) NULL */);
    int execlp(const char *file, const char *arg, ...
                    /* (char  *) NULL */);
    int execle(const char *path, const char *arg, ...
                    /*, (char *) NULL, char * const envp[] */);
    int execv(const char *path, char *const argv[]);
    int execvp(const char *file, char *const argv[]);
    int execvpe(const char *file, char *const argv[],
                    char *const envp[]);

    功能:
        利用进程空间执行另外一份代码
    
    l:参数以列表形式传递
    v:参数以指针数组形式传递
    e:更新环境变量
    p:在系统指定目录下查找文件

    getenv
    char *getenv(const char *name);
    功能:
        获得环境变量名对应的值
    
    setenv
    int setenv(const char *name, const char *value, int overwrite);
    功能:
        设置环境变量的值
    参数:
        name:环境变量名
        value:环境变量的值
        overwrite:非0 覆盖
                  0   不覆盖
    返回值:
        成功返回0 
        失败返回-1 
        
2.线程:
    1.基本概念:
        线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程

    2.线程创建:
        线程独占栈空间,文本段、数据段和堆区与进程共享
    
    3.线程调度:
        与进程调度是一样的
        宏观并行,微观串行
    
    4.线程消亡:
        与进程消亡是一样的

    5.进程和线程的区别:
        进程是操作系统资源分配的最小单元
        线程是CPU任务调度的最小单元

    6.多进程和多线程的优缺点:
        效率:多线程 > 多进程 
             多线程只需在同一进程空间内切换
             多进程需要在不同的空间中切换
        
        通信:多线程 > 有进程
            线程共享全局变量,可以通过全局变量实现数据通信
            进程空间是独立的,没有共享空间,通信实现比较复杂

        通信实现:多进程 > 多线程
            线程共享空间操作时会引发资源竞争
            进程没有共享空间,不存在资源竞争的问题
        
        安全:多进程 > 多线程
            一个进程异常不会影响其余进程空间
            一个线程异常结束会导致进程异常结束,进程异常结束,该进程内所有线程任务均无法向下执行
    
    7.线程相关的函数接口:
        创建: fork      pthread_create 
        退出: exit      pthread_exit 
        回收: wait      pthread_join 

        1.pthread_create
          int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
          功能:
            在该进程中创建一个新的线程
          参数:
            thread:存放线程ID空间首地址
            attr:线程属性空间首地址
            start_routine:线程要执行的函数的入口
            arg:给线程函数的参数
          返回值:
            成功返回0 
            失败返回错误码

        编译时加 -lpthread选项  

        2.pthread_self
          pthread_t pthread_self(void);
          功能:
            获得调用该函数线程的ID  

        练习:创建三个线程任务,线程打印 线程(TID:XXXX)开始执行

        3.pthread_exit 
          void pthread_exit(void *retval);
          功能:
            让调用该函数的线程任务结束
          参数:
            retval:线程结束的值
        
        4.pthread_join 
          int pthread_join(pthread_t thread, void **retval);
          功能:
            回收线程空间
          参数:
            thread:线程的ID号
            retval:存放线程结束状态空间的首地址
          返回值:
            成功返回0 
            失败返回错误码

相关文章:

  • 算法打卡day3|链表篇|Leetcode 203.移除链表元素、 707.设计链表 、 206.反转链表
  • 免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
  • 倒计时42天
  • React入门简介
  • pyspark分布式部署随机森林算法
  • 学习python的第7天,她不再开放她的听歌榜单
  • 【es6 】中的装饰器 decorator 到底是什么,有什么用,和ts 中的装饰器decorator有啥区别
  • 包装类详解
  • FPS游戏之漫谈Shader.globalMaximumLOD
  • 【Elasticsearch专栏 18】深入探索:Elasticsearch核心配置与性能调优 保姆级教程 企业级实战
  • 【Antd】Form 表单获取不到 Input 的值
  • DataGear制作基于three.js的3D数据可视化看板
  • 提升Vue3应用效率的秘诀:深入比较ref与reactive!
  • ubuntu 安装jdk8
  • C语言中的套娃——函数递归
  • JavaScript 如何正确处理 Unicode 编码问题!
  • SegmentFault for Android 3.0 发布
  • go append函数以及写入
  • JDK9: 集成 Jshell 和 Maven 项目.
  • PAT A1120
  • PHP面试之三:MySQL数据库
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue官网教程学习过程中值得记录的一些事情
  • 二维平面内的碰撞检测【一】
  • 前端技术周刊 2019-02-11 Serverless
  • 通过git安装npm私有模块
  • 线上 python http server profile 实践
  • 从如何停掉 Promise 链说起
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #{}和${}的区别?
  • (JS基础)String 类型
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)利用webkit抓取动态网页和链接
  • **CI中自动类加载的用法总结
  • .htaccess配置重写url引擎
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net和php怎么连接,php和apache之间如何连接
  • /etc/sudoers (root权限管理)
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @Query中countQuery的介绍
  • @RequestMapping 的作用是什么?
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [20190401]关于semtimedop函数调用.txt
  • [Android]使用Retrofit进行网络请求
  • [C#7] 1.Tuples(元组)
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [Docker]五.Docker中Dockerfile详解
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)