红联Linux门户

Linux帮助
  • Linux中的EAGAIN含义

    2016-11-04 - 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOC...

  • Shell脚本循环读取文件中的每一行

    2016-11-04 - 使用for循环 for line in `cat filename` do echo $line done 或者 for line in $(cat filename) do echo $line done 使用while循环 while read -r line do echo $line done filename While循环中read命令从标准输入中读取一行,并将内容保存到变量line中。...

  • linux下线程异常退出后的清除问题

    2016-11-03 - Linux系统具备多线程功能,但是如果线程运行过程中异常退出了。有可能一些资源没有被释放,那么怎么办呢?linux下提供了专门的函数,pthread_cleanup_push和pthread_cleanup_pop函数来解决这个问题。 先看一下函数说明: pthread_cleanup_push(void*(*fun)(v...

  • linux下实现一个群聊天室,采用多线程技术

    2016-11-03 - 一个服务器程序,一个客户端程序。 服务器运行后,监听,如果有新的连接,则会开一个线程负责接收数据。接收到的数据会发给所有已有的连接,最多支持10个连接,即聊天室最多10个人。如果有新的连接,则会连不上。 客户端连接后会开启两个线程,一个负责发送...

  • C在linux下完成引用传递

    2016-11-02 - 计算机内存中的每个位置都由一个地址标识,通常,邻近的内存位置合成一组,这样就允许存储更大范围的值,指针就是它的值表示内存地址的变量。 指针变量的值并非它所指向的内存位置所存储的值。我们必须使用间接访问来获得它所指向位置存储的值。当然直接访问...

  • linux shell下载维基百科特色条目并统计单词词频

    2016-11-02 - 思路:首先使用wget下载足够的网页,然后awk配合正则表达式提取网页中的单词,最后使用awk进行词频统计并输出。 1、下载网站内容 首先使用wget递归下载wikipedia网站内容,为了提高采样质量,主要采集维基百科的特色(freatured)条目: wget -r -e robots=off...

  • linux shell统计不同类型文件数目

    2016-11-02 - 文件类型可以由ls l中的第一列获得,为了确保不漏掉文件,可以加上-a参数 dir = ~ names=$(ls la ${dir}) ls l的输出中,第一列第一个字符指示该条目是文件、链接还是目录,第四、七、十个字符指示该文件是否可以被拥有者、和拥有者处于同一用户组的用户、其...

  • linux shell统计不同文件扩展名的个数

    2016-11-02 - 思路:以扩展名作为关联数组的下标,遍历ls的输出,给对应的扩展名+1,最后输出结果。 首先声明一个关联数组: declare -A exnames; ls得到的结果不全是文件,需要使用grep将文件类型的行提取出来,并使用awk得到文件名: names=$( ls -al ${dir}|grep ^-|aw...

  • 嵌入式Linux平台移植-Qt5.7+iTop4412嵌入式Linux平台移植-Qt5.7+iTop4412

    2016-11-01 - 经过为期3天的编译、移植,终于将Qt5.7成功移植到iTop4412开发板,板载exynos4412处理器,基于ARM Cortex-A9内核。因此,本篇教程以iTop4412示例,适用于Qt5.7在ARM_Linux平台上的移植。 移植准备 目标机硬件平台:支持MMU的ARM嵌入式设备 (ARM7及以下芯片...

  • 运用snap run --shell来调试我们的应用

    2016-11-01 - 大家如果使用snap的话,你可以发现如下的命令: liuxg@liuxg:~$ snap --help Usage: snap [OPTIONS] command The snap tool interacts with the snapd daemon to control the snappy software platform. Application Options: --version Print the version a...

  • 科学音频处理(三):如何使用Octave的高级数学技术处理音频文件科学音频处理(三):如何使用Octave的高级数学技术处理音频文件

    2016-10-30 - 我们的数字音频处理技术第三部分涵盖了信号调制内容,将解释如何进行调幅、颤音效果和频率变化。 调制 调幅 正如它的名字暗示的那样, 影响正弦信号的振幅变化依据传递的信息而不断改变。正弦波因为承载着大量的信息被称作载波。这种调制技术被用于许多的商...

  • linux(c)广度优先遍历指定目录

    2016-10-30 - // 广度优先遍历采取的是先遍历完本层目录下的所有文件和目录,当判断是目录时则将该目录加入到目录队列中,等待递归遍历这个目录 #include stdio.h #include stdlib.h #includestring.h #include dirent.h #include sys/stat.h char path[100000][250]={};...

  • linux(c)深度优先递归遍历指定目录

    2016-10-30 - // Linux下递归遍历指定目录,但是因为是深度优先遍历,如果目录过多,会因为资源不足而停止,最好是采用广度优先遍历指定目录下的所有目录和文件 // 遍历时首先得过滤 .和 ..目录,有可能陷入死循环,一个表示当前目录,一个表示上一级目录。 #include stdi...

  • 开发者的实用Vim插件(二)开发者的实用Vim插件(二)

    2016-10-29 - 毫无疑问,Vim 是一个开箱即用并能够胜任编程任务的编辑器,但实际上是该编辑器中的插件帮你实现这些方便的功能。在 开发者的实用 Vim 插件(一)(http://www.linuxdiyf.com/linux/25425.html),我们已经讨论两个编程相关的 Vim 插件标签侧边栏(Tagbar)...

  • 理解boot.img与静态分析Android/linux内核理解boot.img与静态分析Android/linux内核

    2016-10-29 - 一些尝试和理解。 1提取boot.img: 其中,msm代表是高通的芯片,msm_sdcc.1是外接的SD卡挂载的目录,by-name指的是这个sd卡分区的名称。下面几行代表每个分区存储的东西。 记得提前su,dd if=/dev/block/mmcblk0p8 of=/data/local/tmp/boot.img。将boot.img d...

  • linux下的/dev/mem设备认识和使用

    2016-10-29 - 最近在为了读取一个寄存器的值动心思时,突然发现,一个好用的工具r,源码附上: #include fcntl.h #include inttypes.h #include stdbool.h #include stdio.h #include stdlib.h #include string.h #include sys/mman.h #if __LP64__ #define strtoptr strto...

  • 理解Linux/Unix登录脚本理解Linux/Unix登录脚本

    2016-10-28 - 不知道你有没有遇到过这样的场景,当你需要设置一个环境变量,或者运行一个程序设置你的shell或桌面环境,但是不知道在哪里是最方便设置的位置。 有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,...

  • Linux下使用addr2line调试程序的方法

    2016-10-27 - 在调试新开发的应用程序时,经常遇到程序运行时内存崩溃,然后显示一段内粗Dump信息,遇到这种问题时建议使用addr2line来调试。 一般遇到上述情况时,会给出异常时运行在哪个文件的*.o中,此时根据对应的目标文件所在的库文件或者可执行文件,使用如下方法:...

  • 开发者的实用Vim插件(一)开发者的实用Vim插件(一)

    2016-10-27 - 作为 Vi 的升级版,Vim 毫无争议是 Linux 中最受欢迎的命令行编辑器之一。除了是一个多功能编辑器外,世界各地的软件开发者将 Vim 当做 IDE(集成开发环境)来使用。 事实上,因为 Vim 可以通过插件来扩展其自身功能才使得它如此功能强大。不用说,肯定有那...

  • linux下exit()与_exit()的区别

    2016-10-26 - void exit(int staus) 函数, 在头文件 #include stdlib.h void _exit(int status) 函数,在头文件 #include unistd.h中 在Linux C中描述两者区别是:_exit返回后直接返回内核,而exit要进行清除工作,那么两者到底有什么不同呢。编写个小程序就很容易看出来...

  • 最详尽解释Linux内核源码中的container_of宏及其标准C版本实现

    2016-10-25 - 在Linux内核源码文件 include/linux/kernel.h中,定义了container_of宏,源码如下: /** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container struct t...

  • linux openCV显示图片例程

    2016-10-25 - 1.编写代码 opencv_test.cpp #include stdio.h #include cv.h #include highgui.h //使用cv这个命名空间 using namespace cv; /* 主函数 *C语言规定main函数只能有两个参数, *习惯上将这两个参数写成argc和argv。 *第一个代表(传参个数+1), *第二个代表传...

  • Shell脚本中&与&&的优先级

    2016-10-25 - 命令介绍 放在启动参数后面表示设置此进程为后台进程 command 用于控制命令的执行顺序,一般形式为: command1 command2 命令的详细介绍网上有很多文档,在此就不详细列举了。 但不知道有没有人考虑过,如下命令的执行顺序是什么?在某些场景下是否存在副作...

  • linux中BASH_SOURCE[0]

    2016-10-21 - 在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。可能初看有点难以理解,...

  • shell脚本批量监控Linux server配置文件的更改shell脚本批量监控Linux server配置文件的更改

    2016-10-21 - 某些情况下,自己或同事修改了某处系统设置,但由此所引发的问题可能一段时间以后才会暴露,由于记不清之前改过哪些文件、改了哪些内容,解决问题时可能走弯路。于是写了一个小脚本以特定频率来监控常见系统配置文件,如发生变化,则邮件通知管理员。 这里小...

  • linux内核list.h分析linux内核list.h分析

    2016-10-20 - 先说下我的环境是ubuntu16.04 list.h路径在 内容我放到了github上便于查看 list.h 从自己的学习时遇到的困惑来分析。 宏定义 list.h中充斥的大量的宏定义,在不理解这些宏定义的时候,可以尝试将宏替换一下,在看替换后的结果。 最开始看到的是 结构体的定义...

  • linux device tree的board-id、qcom,msm-id、qcom,pmic-id属性linux device tree的board-id、qcom,msm-id、qcom,pmic-id属性

    2016-10-20 - 比如以qcom平台为例来说明: 1.qcom,board-id \kernel\Documentation\devicetree\bindings\arm\msm\board-id.txt文件的解释如下: The cell layout of the qcom,board-idproperty is as follows: qcom,board-id = board_id, reserved where board_id is a 32...

  • 利用shell脚本“综合、集中”查看Linux Server常用软硬件信息利用shell脚本“综合、集中”查看Linux Server常用软硬件信息

    2016-10-20 - 作为运维人员,了解每台服务器的硬件相关信息以及系统相关配置是必不可少的工作。虽然不难,却很零散,信息集中度不高。故而做了做了一套集中展示以上信息的平台(其实谈不上平台,收集-整理-展示而已),其原理由一台监控机(暂且这么叫吧)运行主脚本,根...

  • 在makefile中执行shell需要注意

    2016-10-19 - 1.执行的时候一行就是一个shell。所以一个完整的shell命令必须在一行之内,因此要用\连接起来。 比如 if [ $(obj)X = fsX ]; then \ echo ONE1 $(KBUILD_BUILTIN); \ echo ONE2 $(builtin-target); \ echo ONE3 $(lib-target); \ echo ONE4 $(extra-y); \ ec...

  • 交叉编译libxml2到ARM平台

    2016-10-19 - pc平台使用libxml2库已经没有问题,现在把它编译到ARM平台,在嵌入式环境里面使用。 可以在下面这个链接里找到libxml2的最新源码,也可以在github.com上搜索,链接分别如下: GNOME官网:https://git.gnome.org/browse/libxml2 Github.com上:https://github...

  • shell脚本中for循环

    2016-10-19 - 昨天很痛苦的搞了一天的for循环,在服务器上运行没啥问题,在设备上运行总是不行,部分代码如下: for(i=1;i$cnt+1;i++) do echo xxxx /tmp/test.log done 找了n久原因也没找到,一直以为是自己写的有问题。 今天问了一下同事,才知道嵌入式上面的shell是删...

  • C语言的可变参数在Linux(Ubuntu)与Windows下注意点

    2016-10-17 - 基本上C语言的可变参数原理在不同平台和不同编译器下基本类似(通过函数入栈,从右向左,从高位到低位地址),不过部分实现会有所不同;在使用中需要注意的是: va_list 为char 类型指针,部分调用如vnsprintf、vsprintf(内部通过遍历获取va_arg各个参数值)等...

  • linux下C/C++调用luajitlinux下C/C++调用luajit

    2016-10-14 - 参考了很多网上的资料,但大部分都是直接调用lua的,因为lua和luajit 的API相互兼容,所以很多程序都可以直接调用。 先上代码: 这是test.c 的代码 #include stdio.h #include stdlib.h #include string.h #include math.h #include luajit.h #include lua.h...

  • Linux程序设计(搭建开发环境--curses)Linux程序设计(搭建开发环境--curses)

    2016-10-13 - 讲的内容是:安装curses开发包,以搭建开发环境。闲话休说,言归正转。 curses是Linux上的一个图形库,不过我们使用的Mint只安装了库文件,没有安装与该库相关的头文件。没有这些头文件,就不能进行相关的开发工作。因此,如果我们想使用Linux开发一些简单的...

  • Linux程序设计(curses使用示例)Linux程序设计(curses使用示例)

    2016-10-13 - 要说的内容是curses库,我们主要说它的用法。闲话休说,言归正转。 下面是我利用curses函数库写的一个显示棋盘的小程序,请大家参考: #includeunistd.h #includestdlib.h #includencurses.h int main() { int i; initscr(); //初始化屏幕 if(!has_colors())...

  • Linux下源代码行数统计工具(sloccount,cloc等)Linux下源代码行数统计工具(sloccount,cloc等)

    2016-10-13 - 在windows下总是有很多源代码统计工具, 比如SourceCounter(源代码统计精灵)等工具 之前我总是使用如下命令统计源代码的信息, 繁琐而可读性差 find . -type f -name *.[hc] | xargs cat | wc -l 或者 find . -name *.[hc] | xargs -L 1 wc -l | awk {print $1...

  • Linux环境下使用openssl库的MD5进行数据加密

    2016-10-13 - openssl库中的md5加密工具可以将输入字符串加密后输出16字节数。 测试代码如下: // test_md5.c #include stdio.h #include string.h #include unistd.h #include openssl/md5.h int md5_test(void *idata, size_t len, unsigned char *md5) { MD5_CTX ctx;...

  • Linux环境下使用openssl库的base64进行加解密

    2016-10-13 - openssl库中的加密工具可以对数据进行简单的加解密,代码如下所示: #include stdio.h #include string.h #include unistd.h #include openssl/pem.h #include openssl/bio.h #include openssl/evp.h int base64_encode(char *in_str, int in_len, char *out...

  • 使用CMake将一个源文件编译成一个可执行的二进制文件

    2016-10-12 - 1.首先,在OpenCV的安装目录下新建一个目录,假设目录名为code,于是code就是代码的根目录,并进入code目录中。 zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/opencv/build$ mkdir code zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/opencv/build$ cd code...

  • 对于grub2引导的非debian系linux更新系统内核的脚本

    2016-10-12 - 随手发点代码,方便不会编译的朋友。 代码如下,写进一个sh脚本用chmod +x 文件名添加权限,./文件名直接运行(第一次用这个Markdown写不会用。界面有点不好。) #!/bin/sh #下载ncurses库编译安装 wget ftp://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz gz...