Linux-Android 基础
文章平均质量分 62
zhuxp1
各种打杂,各种学习
展开
-
Linux 文件操作:同一进程、线程打开同一个文件
在看Android 源码的时候能看到Binder驱动打开的文件路径统一都是:"/dev/binder"然后看到每一个 ProcessStated初始化的时候会调用:mDriverFD(open_driver(driver)), 有点疑惑同一个Linux文件被不同的进程、相同进程同时打开(均以读写方式)会有什么效果。写了点测试代码:#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>.原创 2020-07-14 14:55:35 · 2497 阅读 · 0 评论 -
sed命令详解
sed命令详解sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。使用语法sed命令的使用规则是这样的:转载 2016-09-22 17:38:38 · 334 阅读 · 0 评论 -
Makefile经典教程(掌握这些足够)
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写make转载 2016-09-22 21:52:05 · 542 阅读 · 0 评论 -
pthread_join 望文生义害死人
第一次当看到pthread_join(),我的字面理解是将一个thread加入到系统调度队列去,然后,有然后, 看代码就晕乎了。其实pthread_join这个函数的作用是:pthread_join使一个线程等待另一个线程结束。代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会原创 2016-09-07 16:32:44 · 6454 阅读 · 2 评论 -
ubuntu用户及密码的增加和删除
1:增加一个postgres用户:sudo useradd -mk /home/postgres -s/bin/bash postgres为postgres用户添加密码:sudo passwd postgres2:删除一个用户:sudo userdel postgres3:设置ROOT密码方法:sudo passwd root,然后输入密码即可! //此方法原创 2016-09-20 17:39:50 · 3967 阅读 · 0 评论 -
自旋锁(spinlock) 解释得经典,透彻
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_tryl转载 2016-09-08 15:51:27 · 429 阅读 · 0 评论 -
管道Pipe的初次使用
管道Pipe提供一种让多个进程间通信的方法,当进程创建管道时,每次都需要提供两个文件描述符来操作管道。其中一个对管道进行写操作,另一个对管道进行读操作。对管道的读写与一般的IO系统函数一致,使用write()函数写入数据,使用read()读出数据。写了个例子来验证在父子进程之间管道通信效果总结效果如下:管道可以在多个父子进程(1个父进程,多个子进程或者多个孙子进程)通信,多管道的r原创 2017-02-16 19:13:20 · 2015 阅读 · 0 评论 -
linux编程之pipe()函数
linux编程之pipe()函数管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,从而提供一种让多个进程间通信的方法,当进程创建管道时,每次都需要提供两个文件描述符来操作管道。其中一个对管道进行写操作,另一个对管道进行读操作。对管道的读写与一般的IO系统函数一致,使用write()函数写入数据,使用read()读出数据。#includeint pipe(int f转载 2017-02-10 19:43:57 · 427 阅读 · 0 评论 -
Linux环境下段错误的产生原因及调试方法小结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内转载 2017-02-23 18:08:28 · 253 阅读 · 0 评论 -
对象序列化
什么是序列化程序中存储和传递信息,需要有个合适的数据结构,最简单的是定义几个变量,变量多了之后再分门别类,便成了聚合若干变量的对象。代码在函数调用时可以直接传递对象,但更多的场合例如与文件交互、与网络交互、组件之间交互等等,就无法直接使用未经处理的对象。因此Java引入了序列化的概念,用于把一个对象转换为字节序列,然后再对这个字节序列做存储和传递操作。与之对应的是反序列化,反序列化是把一个字节转载 2017-08-16 14:31:06 · 275 阅读 · 0 评论 -
Android性能优化之Systrace工具介绍
http://blog.csdn.net/fanfanxiaozu/article/details/44495265上面这个是翻译的另外一篇http://www.ithtw.com/1009.html本文是Android性能优化工具系列的第一篇,这个系列主要介绍Android性能优化过程中会使用到的一些工具,以及如何用这些工具来发现问题和解决问题转载 2017-08-17 17:38:09 · 2462 阅读 · 0 评论 -
OTA和Recovery系统升级流程介绍
本文介绍了Android原生OTA和Recovery升级过程步骤.进入升级- 1.1 正常启动和进入Recovery的区别下面给出了升级流程的简单示意图。 上图中的上下两个部分,上面一部分是正常的启动模式,下面一部分为Recovery模式。正常的启动模式是从boot.img启动系统(Main System),而recovery模式则是从reovery.img启动系转载 2017-08-29 10:03:06 · 3701 阅读 · 0 评论 -
Android OTA升级原理和流程分析(三)---Android系统的三种启动模式
转载自:http://blog.chinaunix.net/uid-22028566-id-3533851.html 以下的篇幅开始分析我们在上两个篇幅中生成的update.zip包在具体更新中所经过的过程,并根据源码分析每一部分的工作原理。一、 系统更新update.zip包的两种方式 1. 通过上一个文档,我们知道了怎样制作转载 2017-08-29 11:33:58 · 794 阅读 · 0 评论 -
Android Service完全解析,关于服务你所需知道的一切(上)
不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会有点让你吃惊,因为Service和Thread之间没有任何关系!之所以有不少人会把它们联系起来,主要就是因为Service的后台概念。Thread我们大家都知道,是用于开启一个子线程,在这里去执行一些耗时操作就不会阻塞转载 2017-08-29 17:11:39 · 350 阅读 · 0 评论 -
Android Service完全解析,关于服务你所需知道的一切(下)
Android 远程 Service 的实现转载 2017-08-29 18:06:00 · 254 阅读 · 0 评论 -
Linux 获取时间的方法
时间的头文件 #include关于时间的类型:time_t long型,表示从1970年1月1日到现在经过的秒数。structtm { int tm_sec; /* 秒 – 取值区间为[0,59] */ int tm_min; /* 分 - 取值区间为[0,59] */ int tm_原创 2017-08-31 20:02:34 · 2541 阅读 · 0 评论 -
下载、编译、运行android 7.1系统详解(ubuntu 16.0.4)
Android 7的系统版本新增的很多的新功能,比如说任务处理功能,允许用户双击“最近”按钮去快速切换到自己上一次使用的应用程序中。同时,“最近”菜单中还有一个“清除全部”按钮。再比如说新增了省流量功能,在接近用户计费周期末,或是流量包本身较小的情况下,减少应用消耗的数据流量。在启用这一模式时,系统将拦截后台的数据使用,并在可能的情况下减少前台运行应用使用的数据量,例如限制你看视频,下调画质,以及转载 2018-01-12 16:45:05 · 657 阅读 · 0 评论 -
android 调用应用的代码片段
有的时候,我们需要在自己的应用中获取到经纬度,然后打开别的地图应用并显示该经纬度的当前位置. 前提是手机上已经安装了高德或者百度之类的地图应用. 如果有多个,系统会有一个默认的选择打开提示.下面是具体代码:[java] view plain copy Uri uri = Uri.parse("geo:38.899533,-77.036476"); Intent转载 2016-07-21 17:12:00 · 251 阅读 · 0 评论 -
Android解析XML文件的方式
Android解析XML文件的方式在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在Android中如何解析xml文件数据呢? 通常有三种方式:DOM,SAX,PULLDOM方式来处理。DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形转载 2016-06-20 17:40:36 · 372 阅读 · 0 评论 -
poll和select机制
使用非阻塞I/O的应用程序也经常使用poll、selec和epoll系统调用。poll、selec和epoll的功能,本质上是一样的:都允许进程决定是否可以对一个和多个打开文件做非阻塞操作的读取和写入。这些调用也会阻塞进程,直到给定的文件描述符集合中的任何一个可读取或写入。因此,他们常常用于那些要使用多个输入和输出流而又不会阻塞阻于其中任何一个流的应用程序程序中。同一功能之所以要多个独立函数提供,转载 2016-07-27 14:18:27 · 282 阅读 · 0 评论 -
DEVICE_ATTR的使用
DEVICE_ATTR的使用使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。这几个东东的区别就是,DEVICE_ATTR对应的文件在/sys/devices/目录中对应的device下面。而其他几个分别在driver,bus,class中对转载 2016-05-27 18:00:04 · 5269 阅读 · 0 评论 -
chmod命令高级篇( SetUID与SetGID标识位)
在Android中很多人都知道通过su来获得root权限,但是不知道大家有没有研究过su文件的权限/bin/su -rws-r-xr-x 1 root root 注意看到没有那个 s权限是什么呢? s就是SetUID的标识,该设置使文件在执行阶段时其有效用户id (可以通过getuid()取得) 为该文件拥有者的id。而内核检查一个进程是否具有访问某权限时,是使转载 2016-05-06 11:00:10 · 1859 阅读 · 0 评论 -
chmod命令基本篇
在 Linux 下用电脑经常会用到 chmod 命令。 这里详细的介绍一下。 省的每次设置文件属性无效的时候又要在网上找手册去看。chmod 只有管理员才能执行。 普通用户可以通过 sudo chmod 执行。Linux 的文件权限可以分成三段, 通常 ls -l 出来的第一列就是文件权限信息。每个文件(任意类型的文件或者文件夹)的属性都用10个字符表示。举个简单的例子, 看下面这行权限信转载 2016-05-06 10:23:32 · 511 阅读 · 0 评论 -
linux tar (打包.压缩.解压缩)命令说明 | tar如何解压文件到指定的目录
#压缩tar -czvf ***.tar.gztar -cjvf ***.tar.bz2#解压缩tar -xzvf ***.tar.gztar -xjvf ***.tar.bz2 +++++++++++++++++++++++++++++++++++++++++++++ 简介参数:-c :建立一个压缩档案的参数指令(create 的意思);-x转载 2016-05-19 14:00:09 · 819 阅读 · 0 评论 -
Android平台Overlay机制
Android overlay 机制允许在不修改packages中apk的情况下,来自定义 framework和package中的资源文件,实现资源的定制。来达到显示不同的UI得目的(如MIUI)。以下几类能够通过该机制定义:(1),Configurations (string, bool, bool-array)(2),Localization (string, string-arr转载 2016-05-19 15:11:40 · 682 阅读 · 0 评论 -
Android快速分析apk工具aapt的使用教程
aapt简介aapt即Android Asset Packaging Tool,我们可以在SDK的platform-tools目录下找到该工具。aapt可以查看、 创建、 更新ZIP格式的文档附件(zip, jar, apk)。 也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android转载 2016-05-21 10:48:15 · 1193 阅读 · 0 评论 -
linux下创建和删除软、硬链接
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symboli转载 2016-05-21 16:03:52 · 287 阅读 · 0 评论 -
Android属性之build.prop生成过程分析
本文简要分析一下build.prop是如何生成的。Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/product//system/目录下。在Android运行时刻可以通过property_get()[c/c++域] / SystemPropertie转载 2016-06-11 12:36:05 · 236 阅读 · 0 评论 -
Android编译系统环境初始化过程分析
Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就是指定编译的类型和目标设备的型号。Android的编译类型主要有eng、userdebug和user三种,而支持的目标设备型号则是不确定的,它们由当前的源码配置情况所决定。为了确定源码支持的所有目标设备型号,Android编译系统在初始化的过程中,需要在特定的目录中加载特定的配置文件。接下来本文就对上述的初始化过程进行详细分析。转载 2016-06-11 18:31:22 · 222 阅读 · 0 评论 -
Android基础&进阶--墙裂推荐
基础总结篇之一:Activity生命周期基础总结篇之二:Activity的四种launchMode基础总结篇之三:Activity的task相关基础总结篇之四:Service完全解析基础总结篇之五:BroadcastReceiver应用详解转载 2016-07-22 15:27:13 · 250 阅读 · 0 评论 -
linux select函数详解
在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) •我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,或者根本就不等待) 从 sel转载 2016-06-16 18:32:26 · 393 阅读 · 0 评论 -
Linux系统调用的实现机制分析
【摘要】本文介绍了系统调用的一些实现细节。首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系。然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递系统调用号和参数,执行正确的系统调用函数,并把返回值带回用户空间。最后讨论了如何增加系统调用,并提供了从用户空间访问系统调用的简单例子。 【关键字】系统调用,软件中断,库函数,INT转载 2016-06-17 15:52:13 · 1779 阅读 · 0 评论 -
linux select函数用法 && 阻塞与非阻塞IO
select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr。 函数原型是:int se转载 2016-06-17 17:26:47 · 2703 阅读 · 0 评论 -
Linux Poll 使用方法和实现
Linux socket之四:使用POLL机制处理多连接 使用select函数可以处理socket多连接的问题(select的用法参见:http://blog.csdn.net/zhandoushi1982/article/details/5070107),使用POLL也可以实现同样的功能,且调用方式更加简单。原型是:[cpp] view plain转载 2016-06-17 17:34:43 · 41206 阅读 · 1 评论 -
Poll机制分析
最近看了一下Linux Poll 机制的实现,看了韦老师的分析文档,总结如下: int poll(struct pollfd *fds,nfds_t nfds, int timeout);总的来说,Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间,然后再来判断是否有文件可读,如果有,返回fd转载 2016-07-27 13:39:08 · 422 阅读 · 0 评论 -
修改串口设备文件
目标:将uart2的设备文件修改为ttyS6,反之亦然 将uart1的设备文件修改为ttyS5,反之亦然修改“drivers/tty/tty_io.c"文件找到tty_line_name(driver,index,name)这行,这行是用来生成设备文件的名称。在这行前加上一下几句即可if(strcmp(driver->name,"ttyS") == 0) {转载 2016-05-24 18:16:36 · 1494 阅读 · 0 评论