![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux系统和应用编程
Linux系统和应用编程 学习笔记
嵌入式软件和硬件
有趣才精彩,而不是精彩才有趣
展开
-
linux开发 环境搭建
WSL linux环境搭建原创 2022-10-04 15:24:07 · 195 阅读 · 0 评论 -
exec系统调用
因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段。exec函数函数:通常exec函数不返回,成功的调用会调转到新程序的入口点作为结束,而刚刚才被运行的代码是不会存在于进程进程的地址空间中。exec函数调用,改变哪些属性:任何挂起的信号都被丢失; 捕捉的任何信号会被还原为缺省的处理方式; 任何内存的锁定都会丢...转载 2019-06-24 21:45:40 · 1963 阅读 · 0 评论 -
Linux的五种IO模型
转载:https://blog.csdn.net/qq_38847853/article/details/80789747阻塞IO(bloking IO)非阻塞IO(non-blocking IO)多路复用IO(multiplexing IO)信号驱动式IO(signal-driven IO)异步IO(asynchronous IO)...转载 2019-06-22 17:19:05 · 112 阅读 · 0 评论 -
Linux用户态和内核态通信方法--netlink
Linux用户空间和内核空间通信方法:系统调用、procfs、ioctl接口、netlinknetlink 是 Linux 用户态与内核态通信最常用的一种方式。netlink:netlink socekt是一种用于在内核态和用户态进程之间进行数据传输的特殊的IPC。它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket 接口的方式,实现了一种全双工的通讯连接。...原创 2019-06-18 10:38:00 · 1794 阅读 · 0 评论 -
Linux中的线程(LWP) 和 用户线程(线程库实现) 进程(HWP) 区别和关系
Linux的线程概念:内核线程:它的创建和撤消是由内核的内部需求来决定的,用来负责执行一个指定的函数,一个内核线程不需要和一个用户进程联系起来。它共享内核的正文段和全局数据,具有自己的内核堆栈。它能够单独的被调度并且使用标准的内核同步机制,可以被单独的分配到一个处理器上运行。内核线程的调度由于不需要经过态的转换并进行地址空间的重新映射,因此在内核线程间做上下文切换比在进程间做上下文切换快得多。...原创 2019-06-25 18:42:15 · 829 阅读 · 0 评论 -
用户线程的使用和同步
创建线程【 GCC编译的时候需要加上选项 -lpthread 添加编译时的静态链接库】pthread_t用于表示Thread ID,具体内容根据实现的不同而不同,有可能是一个Structure,因此不能将其看作为整数 thread具有:ID、栈、信号掩码、等#include <pthread.h>int pthread_create(pthread_t *restrict ...原创 2019-06-25 18:42:04 · 92 阅读 · 0 评论 -
socket套接字编程
套接字:通过 socket() 函数来创建一个网络连接,或者说打开一个网络文件,socket() 的返回值是(socket描述符),同文件描述符。Windows 也有类似“文件描述符”的概念,但通常被称为“文件句柄”。Linux 平台则使用“描述符”。Internet 套接字分成两种类型:流格式套接字(SOCK_STREAM):TCP 用来确保数据的正确性,IP(Internet ...原创 2019-06-10 19:41:58 · 160 阅读 · 0 评论 -
fork系统调用
一次调用两次返回:一次在父进程中返回,返回值是子进程的pid;另一次是在子进程中返回,返回值为0。在Linux下如果内存没有被写的话,那么父子进程是共用地址空间的,所以内存中的同一个fork函数会在两个进程中调用到。在父进程中返回的就是子进程id,子进程中返回的是0。子进程是父进程的副本:子进程获得父进程的数据段【意味着全部变量不互相影响】、堆栈段、栈的副本。(所谓副本是重新复制一份(或者写时...原创 2019-06-20 10:06:20 · 260 阅读 · 0 评论 -
GDB调试 和 coredump文件
1、GDB调试https://blog.csdn.net/21cnbao/article/details/7385161#commentBoxhttps://www.cnblogs.com/lsgxeva/p/8078670.html2、coredump 查看程序异常崩溃时的状态2.1开启coredump: 查看命令:【ulimit -c】 ...原创 2019-06-20 09:56:25 · 281 阅读 · 0 评论 -
Linux常用命令
1、ctl+z :中断程序运行,(进程状态变为T) ctl+c : 结束当前任务,进程死亡 2、ctl+r :反向搜索输入过的命令3、ctl+d :关闭终端4、ps 命令5、 u : 撤销 ctl+r:取消撤销6、bg %n //将编号为n的任务转后台运行7、 fg %n //将编号为n的任务转前台运行...原创 2019-05-28 15:29:45 · 87 阅读 · 0 评论 -
Linux系统编程--第二章 之 IO多路复用
原因:应用程序通常需要在多于一个文件描述符上阻塞,在不使用线程,尤其是独立处理每一个文件的情况下,进程无法在多个文件描述符上同时阻塞。如果读一个未准备好的文件描述符,进程会被阻塞,不能再操作其他文件,可能阻塞只有几秒,但是应用无响应也会造成不好的用户体验。解决:非阻塞IO。缺点:进程需要不断的发起IO请求,直到响应的fd准备好,其次进程要是可以睡眠,处理器运行效率更高,等到一个或多个文件描述符...原创 2019-05-28 11:08:25 · 192 阅读 · 0 评论 -
Linux系统编程--第二章 文件IO
1、每个进程都有一个文件列表,一个文件描述符是一个文件在文件表中的索引。表中的每一项包括:指向文件inode内存拷贝的指针和元数据。【inode是内核数据结构代表一个文件实体】2、子进程默认会获得父进程的文件表,其中文件列表,当前文件位置,访问模式都一样3、每个进程至少有0(标准输入)、1(标准输出)、2(标准错误)单个文件描述符4、文件描述符不仅仅用于普通文件,也包括:设备文件、管道...原创 2019-05-28 10:06:42 · 667 阅读 · 1 评论 -
Linux系统编程--第三章 缓冲输入输出
1、用户缓冲IO:在用户空间实现的缓冲区,用于将程序的多次轻量级的IO请求组合起来,提高操作效率。2、标准IO:属于C语言标准库,因此文件打开,关闭,读写都是通过标准IO库完成的。3、文件指针:FILE:在C标准库中,不属于内核,实际上映射到内核的文件描述符4、文件操作:一下提到的缓冲区是由C标准库维持的,区别于内核的缓冲区。不执行系统调用,多次轻量级的访问合并,再执行系统调...原创 2019-05-27 10:04:12 · 227 阅读 · 0 评论 -
Linux系统编程--进程管理
1、Linux中init进程就是init程序。【详细见另一篇博客init进程】2、进程ID:内核分配pid的值,不会重用以前分配过的值。3、每个进程都属于一个进程组 ,区别于用户、组的概念。【详见 用户、组】。从用户角度看进程组更像是一个任务4、exec函数簇:#include <unistd.h>int execl( const char *pathnam...原创 2019-05-25 19:28:20 · 238 阅读 · 0 评论 -
Linux系统编程--第一章系统编程简介和主要概念
1.1.1系统调用:通过执行int中断深入内核。i386为例:中断号0x80,系统调用的参数通过寄存器传递。1.2.1 API:应用程序接口:保证源码调用相同的接口,具体实现可以隐藏。1.2.2 ABI: 应用程序二进制接口:保证二进制代码兼容,能够保证目标程序在任何有相同ABI中的系统中运行。不需要重新编译源代码。ABI没有表面上的接口。而是通过编译器、连接器来实现。1.3文...原创 2019-05-07 08:49:58 · 179 阅读 · 1 评论