linux
zhouchaoya142526
include
展开
-
struct tast_struct 和mm_struct成员中的冰山一角
这个东西范围太广了,发现的只是其中微小的的一个角落tast_structstruct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags;原创 2017-04-12 14:41:36 · 741 阅读 · 0 评论 -
gdb调试多进程多线程
gdb调试指令介绍gdb run(r) 程序运行 gdb q (quit)退出调试运行gdb break(b)文件名+n 在某个文件1的第n行打断点 gdb delete breakpoints 取消所有断点 gdb delete breakpoints n 取消n个断点gdb cont/continue 使程序跳过暂停在当前断点继续运行 gdb cont n跳过n个断点继续原创 2017-06-24 18:19:12 · 368 阅读 · 0 评论 -
NAT,代理服务器技术
#NAT技术NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这原创 2017-07-15 09:32:11 · 773 阅读 · 0 评论 -
Linux--计算机端口分类与定时器的分类
计算机一共有多少端口理论上 0~65535 都可以用作端口号 其中1~1023是保留端口,是一些程序所固定使用的,比如网页用80 邮件POP用110,Telnet的端口号是23,FTP端口号21等,其余的几万个就是随机的了,一些进程在开始运行时会随机开启的,人工也可手到设定的 不过要避免使用知名的端口号以及预留的端口号。端口分类端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理原创 2017-07-17 09:21:29 · 342 阅读 · 0 评论 -
Linux--ARP协议与CRC校验
arp协议地址解析协议(Address Resolution Protocol), 是根据IP地址获取目标主机的一个MAC地址的TCP/IP协议。通信前提两台主机要进行通信,那么首先要知道对方的MAC地址,但是怎么才能知道堆放的MAC呢?这里就要用到我们的ARP协议了。主机发送信息的时候将包含目标主机IP的ARP请求通过广播发送到网络上的所有的主机,等待接受到返回信息,收到返回信息后将IP和mac地原创 2017-07-18 10:09:24 · 818 阅读 · 0 评论 -
Linux三次握手和四次挥手
tcp协议格式tcp三次握手过程1.client端向server端发送一个SYN(连接请求)的报文,其中包含了一个初始序列号和一个窗口大小(主要是为了告诉对方自己的接受能力是多大);2.服务器收到客户端发送的SYN报文后,也同样向对方发送一个SYN,ACK的报文,还有一个窗口大小(表示服务器上用来存储来自客户端数据多少的一个能力);3,客户端收到服务器端返回的SYN和ACK之后原创 2017-07-24 13:07:32 · 428 阅读 · 0 评论 -
Linux--shell中字符串的截取
1.在linux中字符串的截取我们可以用一个命令叫做cut,cut主要截取方法有三种1)字节(bytes),用选项-b ,使用方法cut -b/c/f 2)字符(characters),用选项-c 3)域(fields),用选项-f2.以字节定位1)当我们想获取某一字节时 -b后面可以设定要提取哪一个字节,其实-b和3之间没有空格也是可以的,但推荐有空格原创 2017-08-02 23:16:45 · 8935 阅读 · 0 评论 -
Linux--守护进程,为什么要fork两次
守护进程 守护进程也称为精灵进程,Linux 下server都是守护进程。守护进程特点如下: (1)其父进程是1号进程 (2)在后台运行,独立于终端,周期性的以某种任务或等待处理某些发生的事 (3)自成进程组,自成会话,不受登陆注销等影响 (4)一般是孤儿进程因为他们不受用户登录和注销的影响,一直运行着,因此给他们取了一个名字叫做原创 2017-07-25 23:02:29 · 1444 阅读 · 0 评论 -
线程安全和可重入函数
线程安全与可重入定义 线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全。 可重入:可重入代码也叫纯代码(Pure code)是一种允许多个进程同时访问的代码。为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。程序在运行过程原创 2017-07-27 15:30:56 · 308 阅读 · 0 评论 -
进程间通信:共享内存
系统V的IPC通信机制包括了消息队列、共享内存和信号量。每一种IPC结构结构都有一个非负整数标志,当创建一个IPC结构时,调用进程都必须提供一个类型为key_t的键(key)。操作系统把这个键转换为一个IPC的唯一标识符。可以使用以下方式来指定一个键,调用函数如下:#include #include key_t ftok(const char* path, int projecti原创 2017-06-06 16:08:36 · 269 阅读 · 0 评论 -
进程间通信--信号量
进程间通信除了匿名管道,命名管道;还有XSI IPC(消息队列、信号量和共享内存)。 一. 函数介绍 1.什么是信号量? 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区原创 2017-06-03 20:04:36 · 444 阅读 · 0 评论 -
进程间通信--消息队列
Linux的一个重要特色就是允许两个进程间通过数据交换进行通信,这样简单的程序就可以组合起来实现复杂的任务。现在我们主要谈谈基于系统V IPC机制的通信方式–消息队列。一.什么是消息队列?消息队列是消息的链表,每个消息都有固定的最大长度。消息可以加到队列的尾部,消息的发送次序和接收次序是一致的,消息是可以有类型的,这样使用一个队列就可以处理多个消息流。在使用消息队列之前,和IPC另外两原创 2017-06-07 14:52:23 · 380 阅读 · 0 评论 -
vim配置及插件安装管理(超级详细)
1写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我想如果有一个很好用的IDE, 那些Linux牛人也会欢迎的. 这都是劳动人民的美好愿望罢了转载 2017-04-04 17:17:22 · 1680 阅读 · 0 评论 -
进度条的简单实现
代码如下#include #include int main(){ char buffer[52] = {'\0'}; char ch[] = {'|', '/', '-', '\\'}; printf("\033[?25l\033[41m"); printf("%69s\r"); fflush(stdout); printf("\原创 2017-04-06 16:22:56 · 524 阅读 · 0 评论 -
进程间通信--FIFO
在linux进程间通信中,管道(pipe)是非常有用的,而且我们使用的地方也非常多,但是不可否认的是管道有一个致命的缺点就是只能用于有相关关系的进程之间的通信,比如:父子进程。为了很好的解决这个问题。因此我们引入了——FIFO(first in first out)顾名思义:先入先出。相对于pipe来说,FIFO一般被称为命名管道,因为他们和文件系统相关联,可以实现任意两个进程之间的通信。原创 2017-05-24 20:13:57 · 981 阅读 · 0 评论 -
atexit函数介绍
根据我们的理解,一个程序的执行都是从MAIN函数开始执行,从MAIN函数结束,这不可否认没有问题,然后依次往下一条一条语句执行,但是事实真的是这样么,接下来看看这个程序,是不是像我们想象的那样呢?在linux下我编写了这样一个程序,先不要看答案,看看能不能做对(很简单的)根据我们刚才的思路,这个程序应该是先调用fun1,fun2,...依次往下执行,最后的结果就是i am NO.1!原创 2017-04-25 17:58:48 · 747 阅读 · 0 评论 -
孤儿进程与僵尸进程
一.僵尸进程与孤儿进程定义僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。僵尸进程会以终止状态保持在进程表中,并且一直等待父进程都去退出状态代码。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(也是1号进程进程)所收养,并由init进程对它们完成状态收集工作。原创 2017-04-27 16:52:30 · 529 阅读 · 0 评论 -
线程的简单解析
一、线程基本概念 线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。 线程和进程的区别在于, 子进程和父进程有不同的代码和数据空间, 而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定.线程的周期新建就绪运行阻塞死亡线程调度与优先级有线程进入了就绪状态,原创 2017-06-04 23:10:10 · 260 阅读 · 0 评论 -
线程:死锁
一.死锁原理死锁可以定义为一组相互竞争系统资源或进行通信的进程间的“永久”阻塞。当一组进程中每个线程都在等待某个事件(典型的就是等待所请求的资源被释放),而只有这组进程的其他被阻塞的进程才可以触发该事件的发生,这是这时就称为这组进程发生死锁。因为没有事件能够被触发,所以死锁是永久性的。 我们生活中常见的死锁问题就是交通死锁。如图所示,显示了一个十字路口4辆车几乎同时到达了,并且相互交叉的停了下来,原创 2017-06-05 20:23:37 · 1002 阅读 · 1 评论 -
生产者消费者模型
一.理解生产者与消费者linux中有了生产者消费者这一概念,那么是不是可以和现实生活中的生产者消费者相联系起来去看待它?回答是肯定的,在我们生活中我们时时刻刻充当了消费者的角色,生产者生产商品,那么两者之间要进行交易那么就有了一个公共的交易场所,比如学校超市。可以用这样一个图来解释这种关系。 从中我们可以总结出一个 3 2 1 原则 如果我们去买东西,超市里面没有货物,我们会不会隔一秒就原创 2017-06-17 17:14:12 · 474 阅读 · 0 评论 -
epoll模型
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2017-09-09 20:00:29 · 248 阅读 · 0 评论