2016-12-26 - 使用linux系统往往会下载windows平台编码的文件一般是.zip文件/ #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys import zipfile import argparse s = \x1b[%d;%dm%s\x1b[0m # terminual color template def unzip(path): file = zipf...
2016-12-25 - 最近写了个工具,需要在后台静默执行,即使关闭了当前Linux命令行窗口,也不会有影响,我们来戏说。 1.写main.cpp, 生成可执行的二进制文件main (要注意权限,确保可执行) 2.写脚本run.sh (要注意权限,确保可执行) #!/bin/bash allfile=`ls test_*` for one...
2016-12-25 - 在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统/proc 计算某进程内存占用的程序实现方法. 首先, 为什么会有所谓的 伪文件 呢. Linux系统的文件类型大致可分为三类: 普通文件, 目录文件和伪文件. 伪文...
2016-12-25 - waitpid函数 作用同wait,但可指定pid进程清理,可以不阻塞。 pid_t waitpid(pid_t pid, int *status, in options); 成功:返回清理掉的子进程ID;失败:-1(无子进程) 特殊参数和返回情况: 参数pid: 0 回收指定ID的子进程 -1 回收任意子进程(相当于wait)...
2016-12-25 - 一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信...
2016-12-24 - Android系统层面的底层是Linux,并且在中间加上了一个叫做Dalvik的Java虚拟机,从表面层看是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一设备上高效运行,dalvik被改写过。Dalvik虚...
2016-12-23 - 在Linux系统中,使用framebuffer来提供用户态进程直接操作显示屏的功能. 在嵌入式系统开发中,需要对显示屏的内容进行截取,实现一个lcd截屏工具实现对显示屏内容的截取,存储为bmp格式. 一个bmp文件有四部分组成: 其中位图文件头内容如下: WORD bfType; DWORD b...
2016-12-23 - 在Linux源码阅读时,即使使用强大的Source Insight也会因为源码文件太多而导致程序卡死,无故退出等情况,而且由于很多重复的函数名,宏文件定义,给我们读取代码带来了很大的麻烦. 在linux源码阅读时,我们希望能只关心我们当前编译需要使用的代码,但当前的linux...
2016-12-22 - linux3-4及之前定义的一个变量只要被某个不是module的c文件声明就可以,现在linux3.10之后发现必须得EXPORT_SYMBOL。否则会提示类似: ERROR: g_ScreenState [drivers/power/axp_power/shinePadCtrl.ko] undefined! #if 1//20161202 byh int g_ScreenState =...
2016-12-22 - 在linux中,使用getch()很麻烦,以下是我搜集到的密码输入回显星号的代码,亲测好用! #includestdio.h #includetermios.h #includeunistd.h #includeassert.h #includestring.h #include stdlib.h int getch() { int c=0; struct termios org_opts, new_opt...
2016-12-22 - 1.进程和线程的区别 (1)进程资源分配的最小单位,是程序的一次执行。 线程是cpu调度的最小单位,可以理解为进程中执行的一段程序片段 (2)进程间是独立的,一个程序崩溃后,在保护模式下不会对其他进程产生影响。同一进程所产生的线程共享同一内存空间,一个...
2016-12-20 - make:生成数据的代码 test:暴力代码,一定是正确的 code:写的代码 windows: g++ make.cpp -o make g++ test.cpp -o test g++ code.cpp -o code pause :loop make.exe in.txt test.exe in.txt outt.txt code.exe in.txt out.txt fc outt.txt out.txt if n...
2016-12-20 - 在《【Linux】fork()》(http://www.linuxdiyf.com/linux/27062.html)只是简单交代了如同利用fork()创建子线程的方法,实际是更应该说将一个程序一分为二的方法。还有很多事情隐藏在其中值得细致思考。由于fork()结构的特殊性,如果要用fork()创建多个线程...
2016-12-20 - LinuxC的线程与WindowsC的线程有一点的区别,由于线程涉及到操作系统,因此,所调用的库与部分语法有所不同,是很正常的。不过思想是一样的,什么是线程,参考《【Java】线程并发、互斥与同步》(附1)。 下面主要用一个小例子,来说明Linux中线程的使用,如...
2016-12-20 - 其实Linux-C拷贝文件根本不用这么折腾,具体参见《【Linux】利用C语言文件流复制单一文件》(http://www.linuxdiyf.com/linux/17721.html),这个程序也没有什么卵用,直接一个cp好了,主要是借这个程序说明《【Linux】管道的Helloworld》(http://www.linux...
2016-12-20 - 线程最大的特性就是可以一个代码,多个线程同时执行,从而极大地提升程序的运行速度。然而,在线程并发的同时要注意,互斥的情况,比如如下的一个模拟一个最近话题的抢票程序,显然设定的三个线程仅能有一个线程得到票,否则票会撕烂。这次的编程环境编程了L...
2016-12-20 - fork()是LinuxC中一个基本函数,他存在于头文件unistd.h之中,用于创造一个子进程。说白了,就是将本程序一分为二,互补影响地执行。 直接贴一段简单的程序说明fork()的使用: #include unistd.h #include stdio.h int main(){ int count=0; pid_t fpid=fork...
2016-12-20 - 1.工作环境 (1)PC system:Ubuntu12.04LTS。 (2)编辑器版本:Sublime Text 3 2.实现目的 背景就是自己最近开始使用Sublime Text 3编辑代码,发现非常好用,也被它强大的插件功能所吸引。但是,自己在编辑完C/C++代码后使用sublime自带的build并不好用,...
2016-12-19 - Linux通过系统硬件定时器以规律的间隔(由HZ度量)产生定时器中断,每次中断使得一个内核计数器的值jiffies累加,因此这个jiffies就记录了系统启动开始的时间流逝,然后内核据此实现软件定时器和延时。 Demo for jiffies and HZ #include linux/jiffies.h unsi...
2016-12-19 - 我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用 Shell 调试模式(http://www.linuxdiyf.com/linux/26803.html)。 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作。 在本...
2016-12-18 - 对于多线程开发,Linux下有pthread线程库,使用起来比较方便,而Windows没有,对于涉及到多线程的跨平台代码开发,会带来不便。这里参考网络上的一些文章,整理了在Windows和Linux下通用的线程接口。经过测试,在Windows和Linux下均可正常使用。 Windows和Li...
2016-12-18 - 测试环境:ubuntu 64位 1、对齐原因 在设计不同cpu下的通信协议,或者编写硬件驱动程序时,可能需要按字节对齐。即使是看起来就是自然对齐的,也要设置字节对齐,以免不同编译器生成的代码不一样。 理论上来说,处理器可以访问内存的任何一个地址,但出于效...
2016-12-18 - 要观察Kernel各个模块启动时间,并且针对性的进行优化,一般用Initcall Debug来进行调试,我的调试笔记如下: 1.u-boot修改 首先修改u-boot的启动参数,在bootargs参数后添加参数printk.time=y initcall_debug,这样可以使kernel启动时详细打印各个部分启动...
2016-12-17 - 【软件框架】 在对要做的事情一无所知的时候,从全局看看系统的拓扑图对我们认识新事物有很大的帮助。Audio 部分的驱动程序框架如下图所示: 这幅图明显地分为 3 级。 上方蓝色系的 ALSA Kernel 整体属于Linux Kernel,是原生Linux 操作系统的一部分,其中又...
2016-12-17 - 【前言】 编写驱动程序的时候,一般情况下使用的都不是 C标准库的函数,而是 Linux内核中的函数。所以即使用 man命令 也找不到很多函数的帮助信息,这很不利于 Linux内核的学习。 好在 Linux内核虽然没有直接提供手册,却提供了创建手册的工具。我们可以手动...
2016-12-17 - 【I2C框架结构】 Linux 内核中的 I2C 框架分为 3 部分,分别是 Core、Bus Driver、DeviceDriver 。其中 Core 部分是框架中的框架,会调用 Bus Driver 和 Device Driver 中的函数和结构体进行 I2C 注册、数据读写。我将其整理成为下面这张框图(按下 ctrl+鼠...
2016-12-17 - 【Radix Tree】 Radix Tree 是一种数据结构,又称为 PAT Tree(Patricia Tire or crit bit Tree),源自于 Patricia Tree(Practical Algorithm To Retrieve Information Coded In Alphanumeric Tree)。这是一种基于二进制表示键值的查找树,树的叶子节点数...
2016-12-17 - 【前言】 我们学习 Linux 设备驱动,很多人在一开始往往急于想找到快速入门的方法,希望能有一个提纲挈领的使用说明来帮助我们快速理解 Linux 设备驱动的设计思路和框架,从而摆脱掉 Linux 内核这头庞然怪兽。我自己最初也是这样。然而事与愿违,如果学习 Li...
2016-12-17 - 1.先在ubuntu下安装gensim,参考:http://www.linuxdiyf.com/linux/26971.html 2.安装完成之后,就来训练模型。 模型的训练如下: # ################# 例1 ######################### # import modules set up logging import gensim, logging logging.basi...
2016-12-16 - 由于已经习惯了在Windows环境中进行开发,最近在尝试将开发环境转移到Linux上面。遇到一篇值得参考的外文,特翻译记录一下。【只翻译了部分】 一直被集成开发环境和自动构建工具溺爱着,我最近意识到我居然一点儿都不会在命令行模式下去运行Java代码。我花五...
2016-12-16 - 在《【Linux】利用C语言文件流复制单一文件》(http://www.linuxdiyf.com/linux/17721.html)讲述了如何用C语言拷贝文件,但是这只能拷贝单一文件。如果你要用LinuxC拷贝整个文件夹,同样要像《【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝...
2016-12-16 - Linux的管道传输数据的一种方式,但注意并是唯一方式。数据传输的方式,你可以用简单的全局变量传递数据,文件传递数据等等,但这种管道传输的方式,你要看得懂,还算是略为常用。 你可以理解为,两个电话的人,听筒与话筒,而数据则在无线电中传输一样。 Li...
2016-12-16 - 对于实时操作系统(RTOS)和非实时操作系统,你能分别列举出来多少? 实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX 我也只能列举出来这么多了。 重点不在这里,重点在于他们之间的区别,详见下图: 在上面的图中右边的任务优先级高...
2016-12-16 - 众所周知Google的Android系统跟Linux系统有着千丝万缕的关系,可究竟有什么关系呢?有人说Android是Android,Linux是Linux,两个只是kernel一样调度机制一样,其他没一毛钱关系,有人说Android说到底就是个Linux系统,可如果是这样,那么为什么Android系统能...
2016-12-16 - 用dockerfile构建一个Java的web环境,主要分为2步,第一步是在镜像中安装jdk并配置环境变量,第二步是安装tomcat。 先贴一下完整的dockerfile: FROM ubuntu:14.04 MAINTAINER *** ***@******.com RUN apt-get update ADD jdk-8u77-linux-x64.tar.gz /usr/lo...
2016-12-14 - 在上一篇文章《Linux x86内核终止D状态的进程》(http://www.linuxdiyf.com/linux/26883.html)中,我展示了32位x86系统中如何编码杀死D进程。本文我将展示一种64位x86系统上的方法。 说实话,64位系统上做这样的事是比较难的,因为你无法通过修改p-thread.i...
2016-12-14 - 在《Linux如何终止D状态的进程》(http://www.linuxdiyf.com/linux/26882.html),我浮光掠影般描述了一种非规范的结束D进程的方法,只是一种方法,几乎没有可操作性。今天收到了一位朋友的邮件,问我exit_task1到底该怎么写。说实话,我本来不想把故事说完...
2016-12-14 - 碰到这个问题,我第一个反应就是网搜解决方案,后来发现了自己的文章《linux内核模块的强制删除-结束rmmod这类disk sleep进程》(http://www.linuxdiyf.com/linux/26881.html),正好,碰到的也是这类问题。不过本文将介绍一种不触动内核模块本身,而是触动D...
2016-12-14 - 一.问题: 前些日子在工作中遇到一个文件,当rmmod一个模块的时候,在模块的exit函数中阻塞了,rmmod进程杀也杀不掉,永远呆在那里,发现它已经是D(disk sleep)状态了,真的无能为力了吗?我不相信这个事实,所以今天在稍微闲暇的时候换换脑子,终于有了解决...
2016-12-12 - 线程退出前可能有一些清理工作,但是这部分代码又不会放到线程主体部分,就需要挂接一个或者几个线程清洁工来做这部分事情。需要这对兄弟: #includepthread.h void pthread_cleanup_push(void (*rtn)(void *), void *arg); void pthread_cleanup_pop(int ex...