Linux
文章平均质量分 70
hahachenchen789
后台开发,专注容器、k8s、云原生。
展开
-
unix环境 高级编程-线程(1)
线程概念:典型的unix可以看成只有一个控制线程:一个进程在某一时刻只能做一件事,有了多个控制线程之后,在程序设计时就可以把进程设计成在某一时刻能够不止做一件事,每个线程处理各自独立的任务,这种方法有很多好处:1.通过为每种事件类型分配单独的处理线程,简化处理异步事件的代码,每个线程在进程事件处理时可以采用同步编程模式,同步编程模式要比异步编程模式简单得多。2.多个进程必须使用操作系统原创 2016-08-01 21:40:59 · 288 阅读 · 0 评论 -
unix环境高级编程-输入和输出
文件描述符:这通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件,当内核打开一个现有文件或创建一个新文件时,都返回一个文件描述符,在读写这个文件时,可以使用这个文件描述符标准输入、标准输出和标准错误每当运行一个新程序时,所有的shell都为其打开三个文件描述符。如果不做特殊处理,则这三个描述符都连接向终端。大多数shell都提供一个方法,使其中任何一个或所有三个描述符都能重新定原创 2016-08-08 23:45:41 · 402 阅读 · 0 评论 -
ubuntu实现unix domain socket通信
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个原创 2016-09-10 21:55:07 · 2385 阅读 · 0 评论 -
socket通信API函数
sockaddrstruct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};sa_family是地址家族,一般都是“AF_xxx”的形式。好原创 2016-09-10 22:22:51 · 700 阅读 · 0 评论 -
unix高级环境编程-读书笔记(1)
在研读了鸟哥的linux私房菜之后,对linux有了大致的概念,下面就开始研读linux学习中被称为圣经的:Advanced Programming in unix environment,也就是众所周知的unix环境高级编程。unix体系结构:操作系统实际上是一个软件,也就是内核,而内核的接口被称为系统调用(system call),公用函数库构建在系统调用接口之上,应用程序既可原创 2016-07-25 16:45:49 · 671 阅读 · 0 评论 -
ubuntu下socket通信
之前的博文介绍了如何在ubuntu下实现unix domain socket通信,但只是本地的通信,虽然过程和网络通信很类似,但这里还是有必要了解下真正的socket通信首先贴出server端的c代码#include #include #include #include #include #include #include #include #include #defin原创 2016-09-11 13:03:15 · 2717 阅读 · 0 评论 -
unix环境高级编程-文件IO
文件IO:大多数文件IO只需要用到5个函数:open,read,write,lseek和closeopen函数:调用该函数可以创建或打开一个文件#includeint open(const char *pathname, int oflag, ......);pathname 是要打开或者创建文件的名字,oflag可用来说明函数的多个选项,具体oflag参数有如下:O_RD原创 2016-07-26 11:10:06 · 426 阅读 · 0 评论 -
RTOS实时操作系统简介
实时系统:Real-time System 是一种很特殊的系统,一般应用于嵌入式领域,与嵌入式系统有很多交集,但它与嵌入式系统有所区别。嵌入式系统是将应用程序、操作系统、和计算机硬件在一起的系统,是指以应用为中心,以计算机技术为基础,软硬件可裁剪,其针对的用户应用对功能、可靠性、成本、体积、功耗和使用环境有特殊要求的专用计算机系统。而实时系统的核心特征是实时性,本质就是任务处理所花费时原创 2016-09-12 18:55:46 · 5183 阅读 · 0 评论 -
unix环境高级编程-文件和目录(1)
stat、fstat和lstat函数:一旦给出pathname,stat函数返回与此函数命令文件有关的信息结构。第二个参数buf是指针,指向一个我们必须提供的结构体。该结构体的基本结构是:文件类型:1 普通文件(regular file):最常见的文件类型2 目录文件(directory file):包含了其他文件的名字以及指向这些文件有关信息的指针,只有内核可以直原创 2016-07-26 20:11:24 · 442 阅读 · 0 评论 -
Unix环境高级编程-文件和目录(2)
1.用stat函数替换lstat函数,如果命令行参数之一是符号链接,会发生什么变化?lstat和stat函数的区别是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息,也就是说lstat不跟随符号链接,而stat函数跟随符号链接,所以该程序不会显示文件类型是“符号链接”,比如书中程序中,/dev/cdrom是/dev/sr0的一个符号链接,但是原创 2016-08-22 17:38:36 · 477 阅读 · 0 评论 -
unix环境高级编程-进程间通信(2)
函数popen和pclose:常见的操作是创建一个连接到另一个进程的管道,然后读其输出或向其输入端发送数据,这两个函数实现的操作是:创建一个管道,fork一个子进程,关闭未使用的管道端,执行一个shell运行命令,然后等待命令终止。函数popen执行fork,调用exec执行cmdstring,返回一个标准IO文件指针,如果type是r,则文件指针连接到cmdstring的标准输出,而原创 2016-08-08 21:36:17 · 527 阅读 · 0 评论 -
ubuntu开启TFTP服务和NFS服务
NFS和TFTP是利用网络传输数据的两种主要服务。接下来详细解释如何在ubuntu下安装这两种服务TFTP:首先要安装tftp服务端:sudo apt-get install tftpd-hpa //tftpd-hpa是服务器端安装好后配置服务器的设置:sudo vim /etc/default/tftpd-hpa其中第二项是TFTP的传送目录,将传输的文件放在该原创 2016-09-10 13:05:32 · 8063 阅读 · 0 评论 -
linux源码编写入门gcc
使用c语言进行编译的简单实例:编写程序源代码:hello world开始编译和测试执行在默认状态下,如果直接以gcc编译源码,并没有加上任何参数,则执行文件会默认为a.out这个文件名。然后执行这个a.out文件就行那么如果我想产生目标文件object file来进行其他操作,而且执行文件的名字也不是默认的.a.outhello.o原创 2016-07-22 11:21:34 · 410 阅读 · 0 评论 -
unix环境高级编程-高级IO
非阻塞IO:之前曾经把系统调用分为两类,低速系统调用和其他,低速系统调用可能会使进程永远阻塞的一类系统调用。包括:某些文件类型(终端设备、读管道)的数据并不存在,读操作可能会使调用者永远阻塞。如果数据不能被相同的文件类型立即接受,写操作可能会使调用者永远阻塞对已经加上强制记录锁的文件进行读写某些ioctl操作某些进程通信函数非阻塞IO使我们可以发出open、read原创 2016-08-05 15:23:46 · 580 阅读 · 0 评论 -
unix环境高级编程-高级IO(2)
函数readv和writev:这两个函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数成散布读(scatter read)和聚集写(gather write)函数readn和writen:管道、FIFO以及某些设备(终端和网络)有以下性质:1.一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。2.一次write操作的原创 2016-08-05 20:31:47 · 304 阅读 · 0 评论 -
unix环境高级编程-线程(2)
线程终止:如果进程中的任意线程调用了exit、_Exit或者_exit,那么整个进程就会终止,与此类似,如果默认的动作是终止进程,那么发送到线程的信号就会终止整个进程单个进程可以通过三种方式退出,因此可以在不终止整个进程的情况下,停止它的控制流1.线程可以简单地从启动例程中返回,返回值是线程的退出码2.线程可以被同一进程中的其他进程取消3.线程调用pthread_exit原创 2016-08-02 20:00:04 · 382 阅读 · 0 评论 -
unix环境高级编程-进程环境
main函数:int main(int argc, char *argv[]);当内核执行一个c程序时(使用一个exec函数),在调用main前先调用一个特殊的启动例程,可执行文件按将此例程作为程序的开始地址-这是由连接编辑器设置的,而连接编辑器由c编译器调用,启动例程从内核取得命令行参数和环境变量,然后按上述方式调用main函数。进程终止的几种方式:1. 从main返回2.调原创 2016-07-28 19:47:50 · 341 阅读 · 0 评论 -
unix环境高级编程-进程环境(2)
函数getrlimit和setrlimit:每个进程都有一组资源限制,可以用这两个函数查看修改。在更改资源限制时要注意:1.任何进程都可将一个软限制值更改为小于或等于其硬限制值2.任何进程都可降低其硬限制值,但必须大于等于其软限制值3.只有超级用户可以提高硬限制值两个函数的resource参数取下列值之一:每个进程都有一个非负整型表示的唯一进程ID,系统有一些专原创 2016-07-29 17:55:19 · 303 阅读 · 0 评论 -
unix环境高级编程-进程间通信
之前说明了进程控制原语,但是这些进程之间交换信息的唯一途径就是传送打开的文件,可以由fork或exec传送,也可以通过文件系统来传送,接下来说明进程之间相互通信的其他技术-进程间通信(IPC)管道:管道是unix中IPC最古老的形式,管道有以下几点局限:1.历史上是半双工的2.管道只能在具有共同父辈的两个进程间使用。尽管有这些局限性,半双工管道仍是最常见的IPC形式原创 2016-08-06 14:52:13 · 350 阅读 · 0 评论 -
Unix环境高级编程-进程控制(1)
用户ID和组ID:在设计应用时,总是试图使用最小特权(least privilege)模型,依据此模型,程序应当只具有为完成给定任务所需的最小权限,可用setuid函数设置实际用户ID和有效用户ID。用setgid函数设置实际组ID和有效组ID。原创 2016-07-30 22:10:21 · 320 阅读 · 0 评论 -
ubuntu使用minicom连接嵌入式设备
minicom在linux下的作用就相当于串口小工具在windows下的作用,只不过是利用命令行打开该软件而已打开minicom:命令行:sudo minicom键入ctal+A,再键入o,进入设置界面然后选择serial port setupA项:串口设备,在这里我们要选择我们嵌入式设备插上usb线后的设备名称,那么如何查看设备名称呢?重新打开一个终端,输入l原创 2016-09-09 14:33:42 · 2931 阅读 · 0 评论 -
unix环境高级编程-标准IO
标准IO库:不仅在unix上,在很多操作系统上都实现了标准的IO库,它处理了很多细节,例如缓冲区分配,优化长度执行IO等。流和FILE对象:对于标准的IO库,它们的操作是围绕流(stream)进行的。标准的io文件流可用于单字节和多字节字符集,流的定向决定了所读。所写的字符是单字节还是多字节的,当一个流最初被创建,并没有定向,若在一个未定向的流上使用一个多字节IO函数,则将该流的定向设原创 2016-07-26 21:51:57 · 427 阅读 · 0 评论 -
Linux 的nameserver-域名服务器
DNS(Domain Name System)是域名解析服务器的意思,它在互联网的作用是把域名转换成为网络可以识别的IP地址。当用户在浏览器中输入网址域名时,首先就会访问系统设置的DNS域名解析服务器(通常由ISP运营商如电信、网通提供)。如果该服务器内保存着该域名对应的IP信息,则直接返回该信息供用户访问网站。否则,就会向上级DNS逐层查找该域名的对应数据。目前国内上网用户普遍使用的是默转载 2016-08-23 22:25:12 · 25685 阅读 · 0 评论 -
树莓派3+centos7拓展存储空间(LVM学习)
首先下载镜像并烧写安装:http://mirror.centos.org/altarch/7/isos/armhfp/安装基本库:yum groupinstall base利用df -h命令(列出文件系统的使用量)查看挂载的空间,也就是可用的空间大小:[root@centos-rpi3 ~]# df -h文件系统 容量 已用 可用 已用%原创 2017-12-28 17:34:37 · 2701 阅读 · 0 评论 -
树莓派3+centos7实现git服务器
安装git:比如在/usr/local下新建目录git,然后下载源码wget https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.gz解压:tar -xzvf git-2.15.1.tar.gz进入目录,然后安装gitmake prefix=/usr/local/git allmake pr原创 2017-12-29 15:19:12 · 1310 阅读 · 0 评论 -
udp socket通信
server端: #include #include #include #include #include #include #include #include #include #define PORT 7089 #define BUFFER_SIZ原创 2017-11-08 17:05:40 · 464 阅读 · 0 评论 -
设计模式汇总
共有23种设计模式,可分为三大类:创建型模式,结构型模式以及行为型模式创建型模式:该设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new直接实例化对象,这使得程序在判断针对某个给定实例需要创建哪些对象时更为灵活。1.工厂模式2.抽象工厂模式3.单例模式4.建造者模式5.原型模式结构型模式这些设计模式关注类和对象的组合,继承的概念被用来组合接口和定义组合对象获得新功能的方式1.适配...原创 2018-04-16 23:12:15 · 171 阅读 · 0 评论 -
什么是用户态?什么是内核态?如何区分?
原文地址:https://blog.csdn.net/morixinguan/article/details/50775417一般现代CPU都有几种不同的指令执行级别。在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动。举例:intel x86 CPU有四种不同的执行级别0...转载 2018-04-13 20:33:38 · 23881 阅读 · 0 评论 -
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
前段时间,对Meltdown和spectre安全漏洞的讨论非常激烈,该漏洞影响了所有的现代intel处理器,一开始ARM还声称这些漏洞不会影响ARM系列的处理器,但后面的事实证明AMD处理器和ARM内核都没有免遭其害。spectre漏洞使得攻击者可以绕过软件检查,读取当前地址空间中的任意位置数据,meltdown漏洞使得攻击者可以读取操作系统核地址空间的任意位置数据(用户通常不可访问该数据)。这两...翻译 2018-04-13 22:27:31 · 316 阅读 · 0 评论 -
BVT(Borrowed Virtual Time )调度算法
BVT是一种CPU时间调度算法基本原理BVT是一种公平性优先的调度算法,该算法将时间分为实际时间和虚拟时间,其中实际时间为硬件计时器记录的时间,虚拟时间为对实际时间经过某种规则计算后得到的时间值。该算法用虚拟时间来监控进程的执行时间,每次总是调度具有最早的有效虚拟时间的VCPU。这这种调度算法考虑到了运行实时和交互件的应用程序的一些Guest操作系统,允许这些操作系统“借”一些时间片,就是说:在一...原创 2018-06-30 17:59:40 · 2306 阅读 · 0 评论 -
Linux批量删除进程
kill -9 `ps -ef |grep xxx|awk '{print $2}' `转载 2018-08-09 21:38:26 · 718 阅读 · 0 评论 -
Docker 容器资源隔离 namespace
一、简介Linux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。不知道你是否还记得很早以前的 Unix 有一个叫 chroot 的系统调用(通过修改根目录把用户 jail 到一个特定目录下),chroot 提供了一种简单的隔离模式:chroot 内部的文件系统无法访问外部的内容。Linux Namespace 在此基础上,提供了对 UTS、IPC、mount、PID、...转载 2018-09-09 16:56:48 · 1511 阅读 · 0 评论 -
unix域套接字-高级进程间通信
unix提供的各种IPC,包括管道和套接字还有信号量,这里介绍一种高级的IPC-UNIX域套接字机制UNIX域套接字用于在同一计算机上运行的进程之间的通信,虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高,UNIX域套接字仅仅复制数据,并不执行协议处理,不需要添加或删除网络报头。UNIX域套接字数据报服务是可靠的,既不会丢失报文也不会传递出错,可以使用其面向网络的原创 2017-12-22 14:46:16 · 338 阅读 · 0 评论 -
Linux下文件内容查阅命令
cat:从第一行开始显示文件内容tac:从最后一行开始显示,可以看出tac是cat的倒写more:一页一页的显示文件内容less: 与more类似,但是比more更好的是可以往前翻页head : 只看头几行tail:只看结尾几行od:以二进制的方式读取文件内容直接查看文件内容:可以使用cat,tac,nl等可翻页查看:more lessmore:原创 2016-06-28 11:08:03 · 522 阅读 · 0 评论 -
Unix环境高级编程-系统数据文件和信息
unix口令文件/etc/passwd 包含了下表所示的字段:系统定义了两个获取口令文件项的函数,在给出用户登录名或数值用户ID后,这两个函数能够查看相关项。struct passwd *getpwuid(uid_t uid);struct passwd *getpwnam (const char *name);getpwuid函数由ls程序使用,将i节点中的数字用户ID映射为原创 2016-07-27 22:46:43 · 558 阅读 · 0 评论 -
Unable to locate package解决办法
最近在BBB板上安装软件时,apt-get命令无法安装软件,出现Unable to locate package,原因在于软件源未更新,利用以下命令可解决:sudo apt-get update转载 2016-08-25 20:26:20 · 2123 阅读 · 1 评论 -
嵌入式系统的组成
整个嵌入式系统而言,可以分为三个部分1.uboot 2.kernel 3.文件系统。其中kernel中以VFS去支持各种文件系统,如yaffs,ext3,cramfs等等。yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。在内核中以VFS来屏蔽各种文件系统的接口不同,以VFS向kernel提供一个统一的接口。如打开一个文件时统一使用open,写时采用writ原创 2016-09-06 12:30:31 · 1035 阅读 · 0 评论 -
ubuntu命令-查找某个关键字的文件所在处
grep -rl "keyword" ./ 查找该目录下的带有keyword的文件,并显示其文件位置原创 2016-10-25 21:02:40 · 2570 阅读 · 0 评论 -
2015版uboot的启动过程及网卡驱动结构分析
启动流程和上篇博文介绍的rtems类似首先是start.s:在这里选择arm的arm7作为例子分析,代码:/arch/arm/cpu/armv7/start.s/* * armboot - Startup Code for OMAP3530/ARM Cortex CPU-core * * Copyright (c) 2004 Texas Instruments * * Co原创 2016-10-26 23:25:36 · 5752 阅读 · 0 评论 -
volatile和内存屏障(dmb)
volatile C语言中 volatile 关键字用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。volatile只能保证编译器不会做乱序执行优化. 1. 不对*p操作生成乱序指令(通常如此,具体请看后面的解释)(比如条件判断) 2. 每次从*p取数据的时候,一定会进行一次访存操作,哪怕前面不久才取过*p的值放在寄存器里。比转载 2016-11-21 12:40:26 · 2101 阅读 · 0 评论