2017-09-05 - 计算机编程是一项需求旺盛且欣欣向荣的事业, 所以这些日子父母们可能都希望他们的孩子长大后成为一名软件程序员。如果你先教你的小孩如何编程,该从哪儿开始呢? 可以尝试一下此列表中这些对儿童友好的编程语言以及工具。 1.Scratch(https://scratch.mit.edu...
2017-09-03 - 计算机编程语言可用于将指令传达给计算机。它们基于某些句法和语义规则,定义了编程语言中每种结构的含义。 现在我得到了一个凡是可以找得到的每种编程语言的列表。我将它们分为以下几类: 一、解释型编程语言 二、函数式编程语言 三、编译型编程语言 四、过...
2017-09-02 - 就是模拟setuid seteuid setreuid setresuid,感觉代码比书上大段的文字好记,就写成代码形式了。 // setuid.cc: 模拟unistd.h中的设置用户ID的方法的作用 #include stdio.h #include errno.h int real = 0; // 实际用户ID int effective = 0; // 有效用户ID...
2017-09-02 - 今天突然想试下纯socket编程在两个系统上代码重合量有多大,只要不使用VC自定义的宏(比如SOCKET、SOCKADDR等等)感觉代码重合量挺大的。 比如最简单的TCP客户端和服务端对话,在VC中用int取代SOCKET宏,用struct sockaddr_in取代SOCKADDR_IN宏。 然后区别就...
2017-09-01 - 直接贴代码和结果: // FileName: id.cpp #include iostream #include unistd.h using namespace std; int main() { cout 进程ID: getpid() endl; cout 实际用户ID: getuid() endl; cout 有效用户ID: geteuid() endl; return 0; } 实际ID: root(0), xyz(1000...
2017-09-01 - 先贴代码和测试结果: // Mutex.h: 对pthread的互斥量的RAII包装 #ifndef _MUTEX_H_ #define _MUTEX_H_ #include stdio.h #include stdlib.h #include string.h #include pthread.h // 使用错误码errnum和字符串msg来打印错误信息, 并且退出程序 static inli...
2017-08-27 - 做Docker构建镜像的练习,写了下面这个 Dockerfile 文件,其中 yum install tomcat 执行过程中需要用键盘输入两次字符y以便确认选项,Dockerfile 脚本命令如下: FROM centos MAINTAINER quicmous xuyeping@yeah.net RUN yes y | head -2 | yum install tomc...
2017-08-27 - 在上一部分我们学习了关于 DWARF 的信息(http://www.linuxdiyf.com/linux/32098.html),以及它如何被用于读取变量和将被执行的机器码与我们的高级语言的源码联系起来。在这一部分(http://www.linuxdiyf.com/linux/31643.html),我们将进入实践,实现一些...
2017-08-24 - Linux中暂时没发现现成的命令,因此可用用shell脚本结合df -h命令来实现 实现思路: 1、输入一个路径 2、获得df -h信息 3、保存根目录的可用空间大小 4、除了跟根目录之外的其他挂载目录匹配路径,如果匹配成功,取该路径的可用空间,或者取根目录的可用空间...
2017-08-24 - 在Linux环境下,c/c++默认的中文编码为UTF-8,中文的unicode编码是双字节的编码。有趣的是,windows环境下中文utf-8的编码为两个字节,而linux环境下UTF-8的为三个字节,而匹配中文使用正则表达式为 [\u4e00-\u9fa5] 无论你是怎么搜索,搜索出来匹配中文的正...
2017-08-22 - 接触过Linux的朋友们都知道,linux内部的时间分为系统时间和硬件时间。系统时间一般是在系统启动时读一下RTC,然后就依靠定时器维护的时间,这个时间的是掉电不保存的。而 硬件时间通常指的就是RTC,只要RTC有电池供电,这个时间是可以掉电保存的。 系统时间...
2017-08-21 - 为了理解Linux的启动代码,我自己也照着书中抄了一遍。具体的代码如下: ; ; boot.s --bootsect.S framework ; .globlbegtext,begdata,begbss,endtext,enddata,endbss ;global flag .text begtext: .data begdata: .bss begbss: .text BOOTSEG = 0x07c0 entr...
2017-08-18 - 最近折腾一些超级麻烦的东西,先是ros后是OpenCV的qt、ubuntu、树莓派、win各种乱七八糟的东西,简直是剪不断,理还乱。好了,废话不多说,直接上方案。 关于安装qt、opencv什么的我就不详细说了,这里提点一下。关于qt版本的问题,最好还是上qt5吧,虽然没q...
2017-08-18 - snapcraft 是一个正在为其在 Linux 中的地位而奋斗的包管理系统,它为你重新设想了分发软件的方式。这套新的跨发行版的工具可以用来帮助你构建和发布 snap 软件包。接下来我们将会讲述怎么使用 CircleCI 2.0 来加速这个过程以及一些在这个过程中的可能遇到的...
2017-08-16 - 当你做错事时,承认错误并不是一件容易的事,但是犯错是任何学习过程中的一部分,无论是学习走路,还是学习一种新的编程语言都是这样,比如学习 Python。 为了让初学 Python 的程序员避免犯同样的错误,以下列出了我学习 Python 时犯的三种错误。这些错误要...
2017-08-14 - 现象 经常在Linux下开发的人应该都有这样的经验,就是在终端上启动的程序,在关闭终端时,这个程序的进程也被一起关闭了。看下面这个程序,为了使进程永远运行,在输出helloworld后,循环调用sleep: 直接关闭这个终端,在另一个终端上查找该进程,已经找不...
2017-08-11 - 在最近的项目中,我们需要读取在mp3音乐文件中的metadata。如果大家有兴趣的话,可以参阅我的github项目: https://github.com/liu-xiao-guo/coverinfo 我们知道,现在的很多流行的软件都可以去修改一个mp3音乐文件的metadata里的内容,比如再Ubuntu平台上的...
2017-08-02 - 在这里[附1]我曾经介绍过在windows上面是如何实现批量的切流。因为windows终究不如Linux上面可以使用shell脚本来的方便,因此这次在linux上面又实现了一遍(然后还发现,针对同一个报文,linux的执行速度要比之windows快上不少),这里有些注意的地方做一下...
2017-08-02 - 众所周知,Linux自带的random实际上是一个伪随机,所以我这里用了一种新的办法来解决这个问题,那就是时间轴! 时间轴是怎么回事呢?每个时间都是不固定的,这个是不可预测的,因此是随机的,通过获得现在的时间然后将现在的时间换算成秒,然后通过求模运算...
2017-08-02 - 将这段代码保存,然后运行即可,就可以实现一个半小时,电脑右上角弹出来一个框提示您辛苦了需要休息的对话框消息。 代码如下: #!/bin/bash #while true #do realtime=`date +%H:%M` #echo 这条提供关键信息,时间为$realtime if test $realtime != 14:32 t...
2017-08-01 - 第一种: 代码如下: #!/bin/sh echo 打印今天之前连续的十个时间戳 TODAY_DATE=`date` date_range=$(seq 10) # 数组 #echo ${date_range[@]} for i in ${date_range[@]} do INSTANCE_DATE=`date -d ${TODAY_DATE} $i day ago +%Y%m%d`; echo ${INSTANCE_DAT...
2017-08-01 - 新建test文件夹,文件夹存在test.cpp和CMakeLists.txt test.cpp #include iostream #include string #include sstream #include opencv2/core.hpp #include opencv2/highgui.hpp #include opencv2/videoio.hpp using namespace cv; using namespace std; con...
2017-07-31 - 最近一直在忙毕设,出现了很多问题。 今天终于把物联网毕业设计应用层到底层的数据连接上了。 现在上一个让我最无奈的问题。 在ARM开发板系统里面,文件到底可不可以同时被不同的程序读和写? 之前一直都存在一个非常严重的误区。 一直认为,在C语言里物物皆...
2017-07-31 - 让我们先看一下 kdump 的基本使用方法,和 kdump/kexec 在内核中是如何实现。 kdump(https://www.kernel.org/doc/Documentation/kdump/kdump.txt) 是获取崩溃的 Linux 内核转储的一种方法,但是想找到解释其使用和内部结构的文档可能有点困难。在本文中,...
2017-07-27 - 单引号和双引号 在Python中我们都知道单引号和双引号都可以用来表示一个字符串,比如 str1 = python str2 = python str1和str2是没有任何区别的。 我们知道python以其易用性而著名,所以刚开始看教程学习看到单引号和双引号都可以使用会以为这是Python为了方...
2017-07-26 - 今日一位同事在代码里新增了一个.c文件,加了几个调试函数,运行后发现无法使用。通过objdump反汇编看到汇编代码里确实没有该c文件中的调试函数。一开始以为编译有问题,经排查,发现.o确实生成,并且和其他.o生成的.a中也能反汇编出这些函数,在编译输出中...
2017-07-26 - 本程序用于在Linux下使用文件操作对bmp图片进行打马赛克,效果很不错。 对于bmp格式,只需要知道这两点: 1,偏移为18byte的地方保存了bmp图片的宽度和高度,分别占4byte。 2,偏移为54byte的地方为图片的数据区,若为24位彩色图,则一个像素占3byte空间。...
2017-07-24 - 到目前为止,你已经偶尔听到了关于 dwarves、调试信息、一种无需解析就可以理解源码方式。今天我们会详细介绍源码级的调试信息,作为本指南后面部分使用它的准备。 ELF 和 DWARF 简介 ELF 和 DWARF 可能是两个你没有听说过,但可能大部分时间都在使用的组件...
2017-07-24 - 简介 我们在编译安装一些服务时候,如果想要更方便的启动关闭服务,最方便的就是使用系统给的service(CentOS6及以前)或systemctl(CentOS7)来控制,可是怎么才能定义它们呢?当然是需要自定义脚本了,两种工具不一样,定义的脚本也不一样。下面跟着我,我们试...
2017-07-22 - 背景 现代手机这种SOC(system on chip),因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。 比如ADSP简介ADSP(Application Digital Signal Processing)就是高通的Hexagon DSP ,就是独立运转的一个core+system。这样做不仅可以使用...
2017-07-21 - 查看本教程,看看使用 Node-RED 的拖放界面设置硬件流程是多么容易。 Node-RED 是一个编程工具,可让你使用基于浏览器的编辑器快速连接硬件设备。它具有大量的节点,可以以拖放的方式构建流程,这大大减少了开发时间。Node-RED 与树莓派的 Raspian Jessie 一...
2017-07-21 - 一般情况下,很少会用php去执行linux命令,不过特殊情况下,你也许会用到这些函数。以前我知道有二个函数可以执行linux命令,一个是exec,一个是shell_exec。其实有很多的,结合手册内容,介绍以下6个函数。 1,exec函数 ?php $test = ls /tmp/test; //ls是li...
2017-07-21 - 1.添加git版本 在Makefile中添加-DVERSION命令宏,并放入编译命令行中 -DVERSION=$(shell git describe --tags) 在代码中可以输出VERSION宏 .... printf(%s (%s,%s)\n,VERSION,__DATE__,__TIME__); .... 2.添加SVN版本 在Makefile中定义一个变量 REV=$(shell...
2017-07-20 - 1.由Linux时间戳转换为格式化日期: 1例:由一个linux时间戳1490778706000转换为:2017/3/29 下午5:11:46 var CrDate = new Date(); CrDate.setTime(date);//其中data为需要被转化的linux时间戳 1490778706000 var createDate = CrDate.toLocaleString(); //...
2017-07-20 - 应用程序的领域在不断发展。底层的 Linux 做了很多工作,而且还在继续,但是在过去几年里,应用程序领域开始增长。在这种情况下,开发人员使用哪种语言构建这些应用程序?简而言之,要看情况,我知道这个说法没啥稀奇的。但是,通过我们拥有的数据,我们可以...
2017-07-19 - 1.通过skb里面的信息获取mac,如下 struct ethhdr *eth_hdr = (struct ethhdr *)skb_mac_header(skb); if(skb_mac_header_was_set(skb)) { memcpy(dmac, eth_hdr-h_dest, ETH_ALEN); } 注意:需要先通过skb_mac_header_was_set函数判断是否已经设置了mac头,...
2017-07-16 - 有这样一个需求,通过socket请求别人的服务器获取他们的服务器时间,然后需要用这个时间来修改自己服务器的时间。 想到的就是使用Java里面的: Process Runtime.getRuntime.exec(String command); 这命令来执行一个Linux Shell脚本,关于此命令的使用大家可...
2017-07-16 - 编程初学者可能都思考过这个问题,我该怎么学编程?这里我们提供些相关的参考指导来帮助你找到最适合自己学习情况和学习需要的方法。 最近有很多关于学习编程的争论。不仅仅是因为与软件开发公司公开的待应聘的职位数量相比较符合招聘要求的人远远无法满足缺...
2017-07-14 - 本文将分三部分来记录 Linux 内核磁盘相关的知识,分别是虚拟文件系统 VFS、块设备层以及文件系统。 三者的简要关系如下,如图所示,文件系统位于磁盘上,对磁盘上的文件进行组织和管理,块设备层可以理解为块设备的抽象,而虚拟文件系统VFS是对文件系统的一...
2017-07-13 - 概述 今天在学习的时候,遇到了两个非常有用的函数,这里呢我就仔细介绍一下: 这两个函数是非常有用的,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。 dup()函数 利用函数dup,我们可以复制一个描述符。传给该...