Linux/Unix学习
文章平均质量分 84
luoxn28
杭州电子科技大学 Linux爱好者
展开
-
看看国外的本科生能做什么?
人物专访:核心黑客系列之一Robert Love 每个星期,我们都采访一个内核编写社区的人,虽然这样的采访会很侧重技术,但是我们的立足点是为了让所有人都能接受。本周我们采访了Robert Love,现在他正在维护“可抢占内核”的升级包和其他一些事。他使用Linux已经7年了,对于现在的内核有很多贡献。所有这些最后用他自己的话来描述。 记者Jeremy Andrews(一下简称转载 2014-10-31 12:41:48 · 587 阅读 · 0 评论 -
Linux进程间通信-共享内存
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效带来的问题是,我们必须使用其他辅助手段来同步进程对内存的访问,否则会产生竞态条件(一般我们与信号量结合使用)。因此,共享内存通常和其他进程间通信方式一起使用。Linux共享内存的API都定义在sys/shm.h头文件中,包括4个系统调用:shmget、shmat、shmdt和shmctl#include原创 2015-06-30 10:57:53 · 669 阅读 · 0 评论 -
Linux进程间通信-消息队列
消息队列是在两个进程之间传递二进制块数据的一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有选择的接收数据,而不一定像管道和匿名管道那样必须以先进先出的方式接收数据。 Linux消息队列的4个API包括四个系统调用:msgget、msgsnd、msgcrv和msgctl#include int msgget( key_t key, int msgf原创 2015-06-30 22:06:38 · 971 阅读 · 0 评论 -
Linux多线程编程-信号量
在Linux中,信号量API有两组,一组是多进程编程中的System V IPC信号量;另外一组是我们要讨论的POSIX信号量。这两组接口类似,但不保证互换。POSIX信号量函数都已sem_开头,并不像大多数线程函数那样以pthread_开头,常用的有以下5个:#include int sem_init(sem_t* sem, int pshared, unsigned int value)原创 2015-07-03 16:54:49 · 3346 阅读 · 0 评论 -
Linux多线程编程-条件变量
条件变量 如果说线程间的互斥锁是用来同步共享数据的访问的话,那么条件变量是用于线程之间共享数据的值。条件变量提供了一种线程之间的通知机制,当某个共享数据达到某个值时,唤醒等待这个共享数据的线程。条件变量相关函数主要 有5个:#include int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_原创 2015-07-04 19:26:22 · 721 阅读 · 0 评论 -
Linux多线程编程
Linux多线程编程 线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境的调度这的身份,线程可分为内核线程和用户线程。内核线程,在有的系统上称为LWP(Light Weight Process,轻量级线程),运行在内核空间,由内核调度;用户线程运行在用户空间,由线程库来调度。当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程。可原创 2015-07-03 16:26:58 · 1968 阅读 · 0 评论 -
Linux网络编程-自己动手写进程池
并发服务器的实现中,可以通过动态的创建子进程(或子线程)来实现。这样有几个缺点:1、动态创建进程(或线程)比较耗时间,将导致客户响应较慢2、动态创建的子进程或子线程通常只用来为一个客户服务,这导致系统中产生了很多进程或线程,使进程或线程之间的切换消耗很多CPU时间3、动态创建子进程是当前进程的完整映像,当前进程需要谨慎管理其分配的文件描述符,否则子进程可能复制这些资源,导致系统可用资源原创 2015-07-12 21:25:10 · 2803 阅读 · 0 评论 -
Linux多线程编程-互斥锁
互斥锁 多线程编程中,(多线程编程)可以用互斥锁(也称互斥量)可以用来保护关键代码段,以确保其独占式的访问,这有点像二进制信号量。POSIX互斥锁相关函数主要有以下5个:#include int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);int pthr原创 2015-07-04 19:11:48 · 13260 阅读 · 0 评论 -
C++学习-派生类的复制运算符
派生类的赋值控制函数 派生类构造函数在其初始化阶段不仅要初始化类自己的成员,还负责初始化派生类对象的基类部分。因此,派生类的复制控制函数在复制自有成员的同时,也要复制基类部分的成员。类似的,如果派生类的赋值运算符没有处理基类的相应的部分,则派生类中基类的部分会采用默认值,请看下面的程序#include using namespace std;class Base{原创 2015-07-07 08:27:50 · 739 阅读 · 0 评论 -
Linux包含hash_map和hash_set的not declared问题
当在Linux下cpp文件包含hash_map或hash_set时,会出现"‘hash_map’ was not declared in this scope"问题。#include #include #include using namespace std;int main(void){ hash_map hmap; hmap[1] = "hi hdu1"; hmap[2原创 2015-08-21 08:48:49 · 2041 阅读 · 0 评论 -
Linux进程间通信-信号量
当多个进程表同时访问系统上的某个资源的时候,比如同时写一个数据库的某条记录,或者同时修改某个文件,就需要考虑进城的同步问题,以确保任一时刻只有一个进程可以拥有对资源的独占式访问。通常,程序对共享资源的访问的代码只是很短的一段,你就是这一段代码引发了进程之间的竞态条件。我们称这段代码为关键代码段,或者临界区。 信号量是一种特殊的变量,它只能取自然数并只支持两种操作:等待(wai原创 2015-06-30 09:38:53 · 881 阅读 · 0 评论 -
Linux多进程编程
操作系统中核心的概念就是进程:这是对正在运行程序的一个抽象。一个进程就是某种类型的一个活动,它有程序、输入、输出、以及状态。单个处理器可以被若干进程共享,它使用某种调度算法进行进程的调度。注意:如果一个程序运行了两遍,就是两个进程。进程创建 fork#include #include pid_t fork(void); 返回:每次调用返回2次,父进程中返回子进程PID原创 2015-06-29 13:46:44 · 1562 阅读 · 0 评论 -
Linux内核抢占实现机制分析
Linux内核抢占实现机制分析 【摘要】本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性。然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度。 【关键字】内核抢占,用户抢占,中断, 实时性,自旋锁,抢占时机,调度时机,sched转载 2014-11-04 21:43:29 · 611 阅读 · 0 评论 -
DNS负载均衡技术
负载均衡技术能够平衡服务器集群中所有的服务器和请求应用之间的通信负载,根据实时响应时间进行判断,将任务交由负载最轻的服务器来处理,以实现真正的智能通信管理和最佳的服务器群性能,从而使网站始终保持运行和保证其可访问性。 为了充分利用现有服务器软件的种种优势,负载均衡最好是在服务器软件之外来完成。而最早使用的负载均衡技术是通过DNS服务中的随机名字解析来实现的。这就是通常所说的DNS负载均衡转载 2014-10-20 11:29:23 · 607 阅读 · 0 评论 -
dup and dup2的剖析
liadup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Status Flag和读写位置转载 2014-10-17 16:17:46 · 689 阅读 · 0 评论 -
监听套接字 连接套接字
摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。accept函数等待并接受客户请求:#includeint accept(int sockfd, struct sockaddr* add转载 2014-10-20 18:17:09 · 641 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
源于网上资料COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exe转载 2014-11-08 16:32:39 · 573 阅读 · 0 评论 -
C语言返回值深入研究
转载于:http://nxlhero.blog.51cto.com/962631/703953返回值不是挺简单的吗?有什么好研究的。其实返回值不简单,下面就让我们来看看返回值有什么好研究的。在操作系统中(以linux为例),每个程序都需要有一个返回值,返回给操作系统.在shell中,可以利用echo $?查看程序的返回值可以看到,not_转载 2014-12-19 15:29:46 · 645 阅读 · 0 评论 -
C程序的存储空间
参考:《UNIX环境高级编程》第7章 7.6节 C程序一般有下面几部分构成正文段:又叫文本段,这是有CPU执行的机器指令部分。通常,正文段是可以共享的,并 且是只读的。初始化数据段:通常将此段作为数据段,它包含了程序中需要明确的赋初值的变量,比如函 数外的声明:int cnt = 10;非初始化数据段:通常此数据段称为bss段(block start symbol),在程原创 2014-12-04 18:02:08 · 1912 阅读 · 0 评论 -
服务器、客户端简单交互程序
这是一个简单的TCP服务器/客户端的程序示例。客户端发送两个long型变量到服务器端,服务器端读取这两个long型变量并返回这两个变量的和给客户端。这是服务器端的示例代码:#include #include #include #include #include #include #include #include #include #include #include原创 2015-04-10 21:13:13 · 2144 阅读 · 0 评论 -
网络编程API-下 (I/O复用函数)
IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了。Linux中,提供了select、poll、epoll三种接口函数来实现IO复用。1、select函数#include #include int select(int nfds, fd_set *原创 2015-06-26 11:57:32 · 1200 阅读 · 0 评论 -
工厂模式(智能指针方式)
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实原创 2015-11-08 18:54:38 · 1757 阅读 · 0 评论