笔记部分 基础正则表达式: ^   第1个符号 ,以什么什么开头   ^m $  第2个符号,以什么什么结尾  m$    ,还表示空行,或空格,可以用cat  -An 试一下 ^$ 第3个符号,空行  什么符号都没有 .  第4个符号,表示任意 “一个字符” \  第5个符号, 转义字符不解析特殊符号的含义 ,  \n 相当于回车键 ,  \t  相当于tab键 * 第6个符号,表示前一个字符连续出现了0次或0次以上 .* 第7个符号,表示任意字符,包括空行,正则表达式表示所有或连续出现的.…
这是我整理的javascript高级程序设计第二章的脑图,内容也是非常浅显与简单.希望您看了我的博客能够给我一些意见或者建议.…
第九章vim编辑器 1.0).vi与vim Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, 与 vim 等等. vi的优势: 所有的 Unix Like 系统都会内置 vi 文书编辑器,其他的文书编辑器则不一定会存在: 很多个别软件的编辑接口都会主动调用 vi (例如未来会谈到的 crontab, visudo, edquota 等指令): vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计: 因为程序简单,编…
视频链接,推荐看B站 土豆网:http://www.tudou.com/programs/view/XmMDbjJHJC8 B站:http://www.bilibili.com/video/av9664818/ 第九章呢主要讲了档案的属性和目录的配置,我们先来讲档案的属性,这里用到了三个命令chmod,chown,chgrp chmod是改文件权限的有两种方式,文件的权限分三组,对应字母u g o 1. chmod u+wx file 2. chmod 777 file chmod 就这两种方式…
有名管道 无名管道和有名管道: 1. 管道是特殊类型的文件,在满足先入先出的原则写可以读写,不能定位读写位置. 2.管道是单向的. 3.无名管道阻塞于读写位置,而有名管道阻塞在创建位置. 4.无名管道一般只用于亲缘关系进程间通信:有名管道以磁盘文件的方式存在,可以实现本机任意两进程间通信. shell创建有名管道 mknod 管道名 p  //创建名为PIPETEST的有名管道 mknod为命令 p是参数,表示有名管道 指令 > 管道名 &   //将指令结果输入到到管道文件中 指令 <…
Linux操作系统所支持的主要进程间的通信机制. 无名管道 PIPE cat test.txt| grep hello 上面这种管道,将一个命令的输出作为另一个命令的输入,而这种管道是临时的,命令执行完成后将自动消失,称为无名管道. int pipe (int __pipedes[2]) :创建无名管道 如果执行成功,pipe将存储两个整型文件描述符于__pipedes[0](只能读)和__pipedes[1](只能写)中,它们分别指向管道的两端.如果需要双工的,需要建立两个管道. 读写无名管道…
文件描述符重定向 cat<test01  :将输入重定向到test01文件 cat>test02<test01  :将标准正确输出重定向到test02文件,输入设备重定向到test01文件.如果test02存在会覆盖内容.输出文件不存在会自动创建. cat>>test02<test01  :输出追加到test02 cat>test02 2>error <test01  :将标准输出重定向到test02文件,错误输出重定向到error文件.均是被覆盖.2…
共享内存 共享内存主要用于实现进程间大量数据传输. 共享内存的数据结构定义: 系统对共享内存的限制: 共享内存与管道的对比: 可以看到,共享内存的优势: 1.共享内存只需复制2次,而管道需要4次 2.共享内存不需要切换内核态与用户态,而管道需要. 共享内存效率高! int shmget (key_t __key, size_t __size, int __shmflg) :创建共享内存 第一个参数:key值 第二个参数:欲创建的共享内存段的大小(字节) 第三个参数:shmflg创建标识,包括IP…
消息队列 消息队列是消息的链式队列,模型如下: 包括两种数据结构: msqid_ds消息队列数据结构 msg消息队列数据结构 struct msg_msg{ struct list_head m_list; long m_type; //消息类型 int m_ts; //消息大小 struct msg_msgseg* next; //下一个消息位置 void *security; //真正消息位置 }; 在/usr/include/linux/msg.h文件中定义了队列大小的限制.不同的Linu…
System V, 曾经也被称为 AT&T System V,是Unix操作系统众多版本中的一支. 传统上,System V 被看作是两种UNIX"风味"之一(另一个是 BSD).然而,随着一些并不基于这两者代码的UNIX实现的出现,例如 Linux 和 QNX, 这一归纳不再准确. System V IPC基础 System V 的IPC机制主要有消息队列.信号量和共享内存3种机制. shell中的 ipcs 命令可以查看当前系统中正在使用的IPC工具. shell中的 ip…
信号量通信机制 可以看到,跟消息队列类似,也是包括两个结构. int semget (key_t __key, int __nsems, int __semflg) : 创建信号量集合 第一个参数:ftok产生的key值 第二个参数:创建的信号量个数 第三个参数:权限信息 创建信号量例子: #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<sys/ipc.h> #include&…
xinetd服务介绍 xinetd是Linux下的一个网络守候进程,用来统一管理网络负载不大的一组小型网路服务. 一些小型的网络服务,比如时间,telnet服务,不以守候进程出现,而是让xinetd服务以守候进程出现.如果某客户端发起连接,xinetd服务将接收该连接,创建新进程,根据请求信息决定执行具体的服务代码. 我的虚拟机上居然没有...先安装一下吧 sudo apt-get install xinetd xinetd守候进程的配置文件, /etc/xinetd.conf 内容如下 /et…
线程与进程对比 1.用户空间对比 2.内核空间资源对比 在创建线程时,Linux内核仍然创建一个新的PCB来标识这个线程.内核并不认为进程与线程有差别. 进程是操作系统管理资源的基本单元,线程时Linux系统调度的基本单元. 3.进程线程函数对比 创建线程 int pthread_create (pthread_t *__restrict __newthread, __const pathread_attr_t *__restrict __attr, void *(*__start_routin…
域名与IP信息解析 /etc/hosts 文件中有部分IP地址与域名主机名的信息 /etc/resolv.conf 里面有DNS服务器的IP地址 struct hostent { char *h_name; //主机的正式名字 char **h_aliases; //主机备选名称,以NULL结尾的链表 int h_addrtype; //返回地址的类型 有两种 AF_INET或 AF_INET6 int h_length; //地址长度 以字节为单位 char **h_addr_list; //…
socket信号驱动 为了使一个套接字能够使用信号驱动I/O,至少需要以下3步操作. 1.安装SIGIO信号 2.套接字的拥有者设定为当前进程.因为SIGIO信号只会送到socket拥有者进程. 通过fcntl的F_SETOWN 3.套接字必须被允许使用异步I/O. 通过fcntl的F_SETFL,设置为O_ASYNC 在UDP通信中,下面情况会产生SIGIO信号 在TCP通信中,下面情况会产生SIGIO信号 例子: 下面的代码好奇怪,说是UDP的,但是发送接收用的是send, recv 而且客…
UDP组播通信 组播IP地址: D类IP地址  1110.**********  224.0.0.1 ~ 239.255.255.255 组播MAC地址:低23位,直接对应IP地址, 从右数第24位为0, 前24位为 01:00:5E 最终数据帧如图 局域网所有主机网卡都会收到这一消息,但是只有加入到组内的主机才接受该数据包.组播不影响同一局域网内其他主机的效率. 将自己的主机IP地址加入到组播地址组: setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSH…
UDP广播通信 单播:一对一,TCP和UDP均可完成 广播:只能UDP完成.广播时发送方只发送一个数据包,但是网络上的交换机默认转发广播数据包到所有端口.路由器默认不转发任何广播数据包.故广播在局域网范围内. 组播:只有UDP可以完成.发送消息到同一个组播组的主机.视频电话.视频会议多采用. 广播IP地址:主机号全1.网络号正常 广播MAC地址:全1,即FF:FF:FF:FF:FF:FF 广播数据帧格式 处理过程: 网卡驱动程序对比自己的MAC地址与目的MAC地址,发现是广播MAC地址,统一接收…
UDP网络通信流程 UDP没有connect的过程,故发送数据时需要指明目的地址,不能使用read/write/send/recv. 采用sendto()和recvfrom() ssize_t sendto (int __fd, __const void *__buf, size_t __n, int __flags, __CONST_SOCKADDR_ADR __addr, socklen_t __addr_len) 向某一主机发送字节序列 参数1:从本机哪个socket发送数据 参数2:欲发…
控制socket文件描述符属性 1.set/getsockopt()修改socket属性 int getsockopt (int __fd, int __level, int __optname, void *__restrict __optval, socklen_t *__restrict __optlen):获得某个套接字的属性.成功0,失败-1 int setsockopt (int __fd, int __level, int __optname, __const void *__op…
socket多路复用应用 int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)  功能:轮循等待的方式,从多个文件描述符中获取状态变化后的情况 readfds :包含所有可能因状态变成可读而触发select()函数返回的文件描述符 writefds :包含所有可能因状态变成可写而触发select()函数返回的文件描述符 exceptfds :包含所有…
文件I/O方式比较 1.阻塞式文件I/O 进程从调用函数开始,直到返回这段时间都处于阻塞状态. 2.非阻塞式文件I/O 如果当前没有数据可操作,将不阻塞当前进程,而是立即返回一个错误信息.需要反复尝试. 3.多路复用I/O 仍然是阻塞方式等待,但是可以同时等待多个文件描述符. 4.信号驱动I/O 异步方式,等到数据准备好后通知处理进程,不需要重复询问,效率高. I/O阻塞与非阻塞操作 阻塞方式:默认情况下read/write和 把flag设为0的recv/send 非阻塞方式:如果没有数据,立刻…
网络调试工具 tcpdump 功能:打印指定网络接口中与布尔表达式匹配的报头信息 关键字: ①类型:host(默认).net.port host 210.27.48.2 //指明是一台主机 net 202.0.0.0 //指明是一个网络 port //指明端口号 ②确认传输方向:src. dst. dst or src. dst and src src 210.27.48.2 //ip包中源地址为此值 dst net 202.0.0.0 //目的网络地址是202.0.0.0 ③协议关键字:fdd…
使用之前的函数实现的简单聊天程序 TCP协议 双方实时发送/接收消息 实现后的问题: 可能是我虚拟机的IP地址配得有问题吧.在一台电脑上面开两个终端,用127.0.0.1的IP收发可以互通.但是两个虚拟机就不行了,用192.168的IP段,能够ping通但是代码接收不到消息. 还有,两个进程都是接收到消息后,需要我自己按一下回车才能发送消息. 服务器端代码: #include<stdio.h> #include<string.h> #include<errno.h> #…
BSD Socket网络编程API 创建socket对象 int socket (int __domain, int __type, int __protocol) :成功返回socket文件描述符,失败返回-1. 参数1:socket对象使用的地址簇或协议簇  常用的有PF_LOCAL(本机通信).PF_INET(IPv4协议簇).PF_INET6(IPv6协议簇) 参数2:socket的类型.共有六种.常见有:面向连接的数据流方式:面向无连接的数据报方式 参数3:标识采用哪一种协议,0表示默…
IP地址定义: struct in_addr{ __u32 s_addr; }; in_addr_t  inet_addr (__const char * __cp) :把点分十进制IP地址字符串转换为32位IP地址(网络存储顺序). in_addr_t inet_network (__const char * __cp) :把点分十进制IP地址字符串转换为32位IP地址(主机字节顺序). char * inet_ntoa (struct in_addr_in) :把32位网络字节顺序的IP地址…
读写锁 书上有读者写者的代码,我实在是懒得实现一遍了.跟之前的代码差不多. 多线程异步信号处理 int pthread_kill (pthread_t __threadid, int __signo) :发送信号.第二个参数为0时表示检测指定线程是否存在.成功返回0. int pthread_sigmask (int __how, __const __sigset_t *__restrict __newmask, __sigset_t * __restrict __oldmask) :设置调用线…
条件变量通信机制 条件变量必须配合互斥锁一起实现对资源的互斥访问 使用方法: int pthread_cond_init (pthread_cond_t *__restrict __cond, __const pthread_condattr_t *__restrict __cond_attr) :初始化条件变量,第二个参数是属性对象,NULL为默认 int pthread_cond_destroy (pthread_cond_t *__cond) :销毁条件变量 int pthread_con…
线程同步机制 互斥锁通信机制 int pthread_mutex_init (pthread_mutex_t *__mutex, __const pthread_mutexattr_t *__mutexattr) :初始化互斥锁,成功返回0 参数1:要初始化的互斥锁 参数2:定义要初始化的互斥锁属性,NULL表默认 宏 PTHREAD_MUTEX_INITIALIZER 初始化静态分配互斥锁   ??这个语法是什么原理??? #define PTHREAD_MUTEX_INITIALIZER {…
一.端口设备类型 1.显示设备基本信息 cat /proc/tty/drivers 里面包括了: 当前终端:/dev/tty 前台控制台终端:/dev/console 用于创建虚拟终端的:/dev/ptmx 虚拟终端从设备:pty_slave 虚拟终端主设备:pty_master 物理串口:serial 实际的物理串口…
[课程笔记] Linux 下编辑调试工具,gcc,gdb. 把高级语言编译成二进制可执行代码的工具. 需要经历四个步骤: (1) 预处理:去掉注释,进行宏替换(#define相关),头文件(#include)包含等工作 gcc -E test.c -o test.i (2) 编译:不同平台采用的汇编语言不一样.编译将高级语言编译成汇编语言. gcc -S test.c -o test.s (3) 汇编:将汇编语言翻译成二进制的目标代码. gcc -c test.c -o test.o (4) 链…