SF
轻口味
轻口味
注册登录
关注博客
注册登录
主页
关于
RSS
Android C++系列:Linux文件系统(一)
轻口味
2024-07-14
阅读 3 分钟
361
我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种 mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写 一些管理存储布局的信息。上图是一个磁盘分区格式化成ext2文件系统后的存储布局。
Android C++系列:Linux网络(五)常见术语
轻口味
2024-07-14
阅读 3 分钟
336
路由通常与桥接来对比,在粗心的人看来,它们似乎完成的是同样的事。它们的主要区别在于桥接发生在OSI参考模型的第二层(数据链路层),而路由发生在第三层(网络层)。这一区别使二者在传递信息的过程中使用不同的信息,从而以不同的方式来完成其任务。
Android C++系列:Linux网络(四)TCP详解
轻口味
2024-07-13
阅读 5 分钟
373
这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这 张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻 的认识, 不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四...
Android C++系列:Linux网络(三)协议格式
轻口味
2024-07-13
阅读 7 分钟
377
传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用 socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下 处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层 数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装...
Android C++系列:Linux网络(二)通信过程
轻口味
2024-07-12
阅读 2 分钟
350
上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线 (双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物...
Android C++系列:Linux网络(一)网络模型
轻口味
2024-07-12
阅读 2 分钟
2.8k
1. 计算机网络发展概览第一代计算机网络的诞生:1946年产生第一台数字计算机;1954年收发器终端的产生;60年代初,由多重线路控制器参与组成的网络被称为第一代计算机网络。第二代计算机网络的诞生:1964年,Baran提出存储转发概念;1966年,David提出分组概念;1969年,DARPA的计算机分组交换网ARPANET投入运行。第三代计算机...
Android C++系列:Linux守护进程
轻口味
2024-07-11
阅读 2 分钟
409
Daemon(精灵)进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
Android C++系列:Linux进程间通信(二)
轻口味
2024-07-11
阅读 2 分钟
413
mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存 地址,对文件的读写可以直接用指针来做而不需要read/write函数。
Android C++系列:Linux进程间通信(一)
轻口味
2024-07-10
阅读 3 分钟
645
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不 到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用 户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程 间通信(IPC,InterProcess Communication)。
Android C++系列:Linux进程间关系
轻口味
2024-07-10
阅读 5 分钟
316
在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进 程的控制终端(Controlling Terminal),在前面文章我们说过,控制终端是保存在PCB中的信 息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是 这个终端。默认情况下(没有重定向),每个进程的标准输入、标准...
Android C++系列:Linux进程(三)
轻口味
2024-07-09
阅读 3 分钟
244
wait/waitpid僵尸进程: 子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为1号 进程init进程,称为init进程领养孤儿进程 {代码...} < -1 回收指定进程组内的任意子进程-1 回收任意子进程0 回收和当前调用waitpid一个组的所有...
Android C++系列:Linux进程(二)
轻口味
2024-07-09
阅读 4 分钟
199
1. fork {代码...} 子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。 fork调用一次返回两次父进程中返回子进程ID子进程中返回0读时共享,写时复制 {代码...} 1.1 进程相关函数 {代码...} getpid/gteppid {代码...} getuid {代码...} getgidvfork用于fork后马上调用exec函数父子进程,共用同一地址空间,子...
Android C++系列:Linux进程(一)
轻口味
2024-07-08
阅读 3 分钟
316
我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信 息,Linux内核的进程控制块是task_struct结构体。现在我们全面了解一下其中都有哪 些信息。
Android C++系列:Linux常用函数和工具
轻口味
2024-07-08
阅读 2 分钟
255
如果times是非空指针,则存取时间和修改时间被设置为 times所指向的结构中的值。此 时,进程的有效用户ID必须等于该文件的所有者 ID,或者进程必须是一个超级用户进程。对 文件只具有写许可权是不够的
Android C++系列:Linux Socket编程(四)多路IO转接服务器
轻口味
2024-07-07
阅读 2 分钟
329
select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开 的文件描述符个数并不能改变select监听文件个数
Android C++系列:Linux Socket编程(三)CS模型示例
轻口味
2024-07-07
阅读 6 分钟
358
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于 监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服 务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK 段,服务器收到后从accept()返回。
Android C++系列:Linux Socket编程(二)网络套接字函数
轻口味
2024-07-06
阅读 3 分钟
502
type:SOCK_STREAM 这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。
Android C++系列:Linux Socket编程(一)预备知识
轻口味
2024-07-06
阅读 4 分钟
447
我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区...
Android C++系列:NDK减少so库体积方法总结
轻口味
2024-07-05
阅读 3 分钟
445
基于亚马逊AVS Device SDK改造的全链路语音SDK最终编译的动态库有几十个,单架构动态库大小有几十兆,之前在Iot设备中勉强跑着,但是这个体积对于手机应用来说是致命的,各个模块费事费力能优化个几K的体积就不错了,我这直接给上个几十兆的,APP平台方肯定无法接受。但是一是有业务需求,二是自己又想把SDK推到手机APP...
Android C++系列:JNI中的Handler--ALooper
轻口味
2024-07-05
阅读 5 分钟
788
在Android中,UI线程是一个很重要的概念。我们在日常开发中对UI的更新和一些系统行为,都必须在UI线程(主线程)中进行调用。我们在子线程更新UI时最常用的手段就是Handler,Handler的主要原理:
Android C++系列:JNI中的线程操作
轻口味
2024-07-04
阅读 4 分钟
625
Java中创建线程三种方式:继承Thread类创建线程类;通过Runnable接口创建线程类;通过Callable和Future创建线程。Native 中支持的线程标准是 POSIX 线程,它定义了一套创建和操作线程的 API 。我们可以在 Native 代码中使用 POSIX 线程,就相当于使用一个库一样,首先需要包含这个库的头文件: {代码...} 这个头文件中定...
Android C++系列:JNI引用管理
轻口味
2024-07-04
阅读 8 分钟
407
在 Native 代码中有时候会接收 Java 传入的引用类型参数,有时候也会通过 NewObject 方法来创建一个 Java 的引用类型变量。在编写 Native 代码时,要注意这个代表 Java 数据结构类型的引用在使用时会被 GC 回收的可能性。
Android C++系列:JNI开发准则
轻口味
2024-07-03
阅读 14 分钟
917
JNI 定义了 Android 使用 Java 或 Kotlin 编程语言编的代码编译的字节码与原生代码(使用 C/C++ 编写)互动的方式。JNI 是一套标准的协议,不受硬件限制,支持从动态共享库加载代码,在一些情况对比直接使用Java高效。我们可以使用 Android Studio 3.2 及更高版本的内存性能剖析器中的 JNI 堆视图来查看全局 JNI 引用,...
Android C++系列:JNI调用时的异常处理
轻口味
2024-07-03
阅读 3 分钟
433
Native 代码自己抛出了一个异常让 Java 层去处理 可以看到异常的发生和处理基本都需要 Native 和 Java 交互,而对于 Native 自身出了异常,也就是 C/C++ 代码有问题,导致应用崩溃的又是另一回事了。
Android C++系列:JNI调用 Java 类的构造方法和父类的方法
轻口味
2024-07-02
阅读 5 分钟
474
Android JNI开发时经常遇到C/C++层访问Java层对象的,比如C/C++层创建一个String返回,或者访问Java层提供的MediaCodec等,此时我们就需要通过 JNI 来调用 Java 一个类的构造方法来创建这个 Java 类。
Android C++系列:JNI常见问题
轻口味
2024-07-02
阅读 19 分钟
612
智能语音交互SDK工程模块编译时指定的ANDROID_PLATFORM统一是23:-DANDROID_PLATFORM=23,ndk使用的是版本是17,在手上现有设备跑的都没问题,但是在一个新采购的temi移动机器人上跑不起来,定位到问题是信号处理库报了下面问题:
Android C++系列:JNI操作Bitmap
轻口味
2024-07-01
阅读 10 分钟
537
Bitmap代表一个位图,BitmapDrawable*里封装的图片就是一个 Bitmap对象。开发者为了把一个 Bitmap对象包装成 BitmapDrawable 对象,可以调用 BitmapDrawable的构造器:
Android C++系列:JNI 调用时缓存字段和方法 ID
轻口味
2024-07-01
阅读 3 分钟
386
通常我们通过 FindClass 、GetFieldID、GetMethodID 去找到对应的信息也是耗时操作,如果方法被频繁调用(特别是像音视频处理时循环的调用JNI方法传递音视频数据),每次都去查找对应的类和方法ID会很耗性能,所以我们必须将它们缓存起来,达到只创建一次,后面直接使用缓存内容的效果。
HarmonyOS原生智能,生而智能能力探索
轻口味
2024-06-30
阅读 6 分钟
643
今年六月份华为HDC开发者大会上有主题分享了华为HarmonyOS的原生智能能力,之前做过两点的端智能系统开发,最后也失败了,在“原生智能、生而智能”的分享中看到了几个应用的分享,本文探讨与OS深度结合后,AI能为开发者带来什么。
Android C++系列:C++与Gradle结合
轻口味
2024-06-30
阅读 3 分钟
384
如果Android工程有第三方so库,并且jni编译后使用下面的cmake指定输出目录到 jniLibs下,有可能会发生 so库重复的错误。请采用以下方法避免错误:
上一页
1
…
More
3
4
5
(current)
6
7
下一页
上一页
5
(current)
下一页