自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序猿Ricky的日常干货

学而不思则罔,思而不学则殆! (xiehaocheng127@163.com)

  • 博客(23)
  • 资源 (4)
  • 收藏
  • 关注

原创 Linux -- 进程间通信(IPC)机制

Linux系统的IPC方式有如下几种:pipe管道它是unix系统中最古老的IPC形式,所有的UNIX系统都提供此种通信机制,它有以下两种局限性:(1)半双工。现在,虽然某些系统提供了全双工的管道,但是为了可移植性,我们绝不能假定系统支持全双工管道。(2)管道只能在具有公共祖先的两个进程之间使用。通常,一个管道由一个进程创建,在进程调用fork后,这个管道就能在父子进程之间使用了。FIF...

2019-03-29 18:00:11 344

原创 Linux -- signal信号

简介信号是操作系统提供了一种处理异步事件的方法,每个用户进程都会接受到信号,并且可以注册信号处理函数,当信号到来时会执行注册的处理函数。当信号到来是可以告诉内核使用如下三种方式处理对应的信号:忽略该信号。大多数信号都可以做此操作,除了SIGKILL和SIGSTOP这两个信号,代码中信号处理函数注册为SIG_IGN可以忽略信号。捕获信号。注册信号处理函数为自己想要执行的用户函数,同样的,S...

2019-03-29 11:58:24 655

原创 Linux应用层时间函数

time时间函数#include <time.h>time_t time(time_t *ptr);这个函数返回从UNIX新纪元( 1970年1月1日00:00:00 UTC )开始到现在经过的秒数,并且是按照UTC协调时间进行计算,统称为日历时间。它的精度是秒。clock_gettime#include <sys/time.h>int clock_get...

2019-03-28 14:55:55 398

原创 Linux -- getopt参数解析

getopt函数#include <unistd.h>int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, optopt;getopt函数需要传入对应的argc和argv参数表,还...

2019-03-28 10:56:50 531

原创 Linux -- 进程控制

进程id和用户id#include <unistd.h>pid_t getpid(void); //返回当前进程的idpid_t getppid(void); //返回父进程的iduid_t getuid(void); //返回实际用户iduid_t geteuid(void); //返回有效用户idgid_t getgid(void); //返回实际组id...

2019-03-27 15:44:43 196

原创 Linux fcntl 函数详解

接口#include <fcntl.h>int fcntl(int fd, int cmd, ...);返回值:正确返回值根据命令码而定,错误返回-1。fcntl是用来修改已经打开文件的属性的函数,包含5个功能:复制一个已有文件描述符,功能和dup和dup2相同,对应的cmd:F_DUPFD、F_DUPFD_CLOEXEC。当使用这两个cmd时,需要传入第三个参数...

2019-03-26 19:37:33 8783

原创 系统限制和选项:sysconf 函数详解

Linux系统的实现需要遵循很多个标准,比如ANSI C标准,POSIX标准,XSI标准,每个标准都有各自的限制和选项,标准中规定有一些内容是必须的,一些是可选的。当我们的应用程序设计遵循标准中的选项和限制,那么就可以达到最大化的可移植性。静态定义不管是限制还是选项,都是支持静态和动态获取的,也有一些只能在系统运行后才能确定其值的,那么就只有通过动态去获取了。对于静态定义的系统限制和选项,宏定...

2019-03-25 20:04:29 2287

原创 Linux rlimit 函数详解

简介每个进程在运行时系统不会无限制的允许单个进程不断的消耗资源,因此都会设置资源限制。Linux系统中使用resource limit来表示,每个进程都可以设置不同的资源限制,当前进程和其以后fork的子进程会遵循此限制,而其他进程不受当前进程条件的影响。ulimit命令ulimit是一个shell内建的命令:ulimit 是 shell 内建通过该命令,我们可以设置当前shell环境...

2019-03-25 16:33:48 11728

原创 POSIX记录锁

假设一种情况,如果有两个进程同时操作同一个文件,那么最后这个文件的状态会是如何?在Linux系统中,是允许多个进程同时操作一个文件的,而文件的状态是由最后一个修改进程决定的。但是如果想要保证当前进程的修改是排他的,比如操作一个数据库文件,该怎么办呢?这时就可以使用记录锁功能保证对文件的操作是排他的,独占的。类UNIX系统中,存在很多种记录锁的实现,本文主要介绍POSIX.1标准的记录锁,POS...

2019-03-22 15:58:34 656

原创 如何判断当前的进程是否以root权限运行?

当前登录系统的用户叫做实际用户,而实际运行的进程是以有效用户ID来进行访问权限管理的,正常情况下有效用户就是实际用户,但是如果我们使用了sudo或者使能了设置用户ID位,按照前面文章的介绍,这个有效用户是可能改变的,比如使用sudo执行,进程的有效用户ID就会变为root,那么此进程就相当于具有了root权限。如果我们的程序只允许使用root运行,那么该如何设计呢?C语言程序设计#inclu...

2019-03-21 19:17:01 6114

原创 Linux守护进程设计

守护(daemon)进程是为系统提供某种服务的进程,跟随系统启动时启动,在系统关闭时才终止,没有控制终端,属于后台运行的进程。它的设计有如下一些规则和惯例:1.设置umask(0),umask设置的是拒绝的访问权限位,和chomd命令正好相反,为了防止由父进程继承该umask,这里需要把默认文件模式的创建屏蔽字设置为0,也就是不拒绝任何权限设置。2.调用fork(),然后使父进程退出exit,...

2019-03-20 20:24:38 571

原创 设置用户ID和设置组ID

与进程相关的ID有如下几个:1.实际用户ID、实际组ID2.有效用户ID、有效组ID、附属组ID3.保存的用户ID、保存的组ID第一组标识我们实际的ID,比如登录shell使用的ID;第二组是进程运行时用于判断文件访问权限的ID,这个是跟访问权限息息相关的;第三组是当我们的ID发生变化时保存的值,方便我们找回。正常情况下实际ID和有效ID是相等的,但是如果我们配置了设置用户ID和设置组...

2019-03-20 17:31:36 1520

原创 标准输入,标准输出和标准错误

当我们使用文件描述符进行操作时,需要操作标准输入、标准输出、标准错误,可以包含如下头文件:#include <unistd.h>这个头文件中定义了标准设备:/* Standard file descriptors. */#define STDIN_FILENO 0 /* Standard input. */#define STDOUT_FILENO 1 ...

2019-03-19 17:48:04 5333

原创 Linux错误处理(errno)

Linux系统函数失败后都会返回一个负值,并且整形变量errno通常被设置为错误码。我们在使用错误码时,需要包含如下头文件#include <errno.h>errno只在函数返回错误时才有意义,当函数执行正常返回时并不会重置errno,因此此时的errno是不能作为错误处理的。errno是一个int型变量,除了直接使用该变量,还有两个和其相关的API可以方便的查看错误类型:...

2019-03-19 16:43:46 3309

原创 Core Dump调试

环境本文以笔者操作系统ubuntu14.04 LTS为例介绍core dump功能。首先查看系统是否使能了core dump功能:$ ulimit -c0返回0表示没有使能,我们需要使能该功能:ulimit -c 1示例#include <unistd.h>#include <stdio.h>#include <errno.h>int...

2019-03-19 15:12:31 1645

原创 Linux程序动态库的加载

查看可执行文件中依赖的动态库:$ readelf -d /bin/shDynamic section at offset 0x1ca88 contains 27 entries: 标记 类型 名称/值 0x0000000000000001 (NEEDED) 共享库:[libc.so.6] 0x0000...

2019-03-18 20:24:43 5117

原创 Linux系统默认PATH环境变量的设置

当系统启动后,想要运行一个程序,大部分情况下我们都是直接使用程序名即可运行,那是因为系统中的PATH环境变量已经添加了程序所在的目录,程序加载器会查找PATH环境变量来确定该程序所在的绝对路径。init进程中的实现系统在启动时第一个运行的用户空间进程叫init,init进程在启动时会去配置PATH环境变量,而其他用户进程都是由init进程fork产生,所以其他进程都会继承该默认的PATH配置了...

2019-03-18 18:53:24 4866

原创 系统构建 -- QEMU调试内核(gdb)

qemu中包含有gdbserver功能,利用这个功能我们可以直接对kernel进行gdb调试。-S freeze CPU at startup (use 'c' to start execution)-s shorthand for -gdb tcp::1234主要就是利用qemu的这两个选项来进行调试,比如我的qemu环境中的启动命令:...

2019-03-13 16:29:09 1815

原创 系统构建--NFS挂载根文件系统

本文介绍的是利用NFS挂载根文件系统。host上需要先配置NFS服务startnfs.sh:HOST_IP=192.168.1.1NET_NUMBER=192.168.1.0NET_MASK=255.255.255.0NFS_ROOT=~/work/rootfssudo apt-get install nfs-kernel-serversudo apt-get install ...

2019-03-12 17:54:46 497

原创 系统构建--从sdcard中加载根文件系统

本文介绍的是使用分区block设备作为根文件系统的加载方法,使用QEMU来模拟硬件来进行讲解。制作嵌入式Linux系统的rootfscd rootfs/sudo dd if=/dev/zero of=rootfs.ext3 bs=1M count=50sudo mkfs.ext3 rootfs.ext3sudo mount -t ext3 rootfs.ext3 /mnt -o loop...

2019-03-11 15:36:34 997

原创 系统构建--initramfs的制作和使用

经过前文的介绍,我们知道initramfs可以直接编译到内核中,只需要在CONFIG_INITRAMFS_SOURCE=&quot;../rootfs&quot;CONFIG_INITRAMFS_ROOT_UID=0CONFIG_INITRAMFS_ROOT_GID=0本文主要介绍如何制作和加载独立的initramfs,首先需要保证内核选项使能:CONFIG_BLK_DEV_INITRD=y制作ini...

2019-03-11 10:50:55 8917 1

原创 系统构建--根文件系统的挂载

在开始讲解根文件系统挂载之前,首先需要明确如下几个概念:ramdisk/rootfs/initramfs/initrd。ramdisk以一块固定大小的内存作为一个block设备创建文件系统,其中的内容只存在于内存中,修改它的内容不会记录到磁盘中。它用内存模拟了block设备,所以其中的内容还要先加载到page cache中,本身它是内存,创建的page cache也是内存,这产生了对很多内存...

2019-03-10 14:24:07 1201

原创 HMP调度器和EAS调度器

HMP调度器为了降低功耗,ARM开发了大小核架构处理器。Linux内核中的负载均衡算法基于SMP模型,并未考虑big.LITTLE模型,因此Linaro开发了一个HMP调度器用于支持这种架构,它也被用于Android 5.x和Android6.x中,但这种调度器并没有被合入内核的基线中。该调度器的进程调度算法基本上和CFS一样,主要区别在于调度域和负载均衡的处理上。HMP调度域的实现比自带的C...

2019-03-08 10:27:41 12831 2

linux gtk hello test

gtk hello world,test for gtk lib

2016-01-14

linux v4l2 camera config

linux v4l2 camera config

2016-01-14

v4l2 camera capture and config

linux系统下的camera capture和camera config实例

2015-08-17

linux v4l2 camera capture

v4l2接口,camera capture实例,合法合规!

2003-07-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除