Linux
文章平均质量分 57
萧-十一
这个作者很懒,什么都没留下…
展开
-
【Linux学习笔记】gcc编译单个文件
编译程序的基本知识 GCC编译器对程序的编译如图所示,分为四个阶段:预编译,编译和优化,汇编和链接。源文件:存放可编辑代码的文件,如存放C,C++和汇编语言的文件。 目标文件:经过编译器编译生成的CPU可识别的二进制代码,但是目标文件一般不能执行,因为其中有一些函数过程没有相关的指示和说明。 可执行文件:目标文件与相关的库链接后的文件它是可以执行的。预编译过程将程序引用的头文件包含进源代码中原创 2017-03-25 23:28:08 · 5555 阅读 · 0 评论 -
【Linux】线程的创建
线程ID类似于进程ID,线程ID用于表示线程,使用类型pthread_t来表示。 该类型在不同的系统中实现的方式也不相同,Linux中使用无符号长整型,而在其他实现中可能使用结构指针,所以考虑到可移植性,对于该类型尽量不要直接当整型来处理。pthread_self函数原型:pthread_t pthread_self(void);功能:返回调用线程的线程ID线程的创建创...原创 2018-02-13 23:00:01 · 177 阅读 · 0 评论 -
【Linux】线程和信号
相比于进程中的信号处理,在线程中更加复杂,线程中的信号处理有如下特点:每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着单个线程可以阻止某个信号,但是当某个线程修改了一个信号的处理行为,那么所有线程都会共享这个改变。进程中的信号是递送到单个线程的。如果一个信号和硬件故障相关,那么该信号一般会被发送到引起该事件的线程中去,而其他的信号会被发送到任意的线程中。...原创 2018-03-07 14:21:46 · 437 阅读 · 0 评论 -
【Linux】线程同步—屏障(实现多线程排序算法)
屏障与互斥量、读写锁等不同,它不是用来保护临界区的,而是与条件变量类似,是一种线程之间的同步机制。屏障允许每个线程等待,直到所有合作线程都到达某一点,然后从该点继续执行。pthread_join就是一种屏障,它允许线程等待直到另一个线程退出。#include <pthread.h>pthread_barrier_t ; //屏障数据类型int pthread_barrie...原创 2018-02-27 21:47:52 · 1352 阅读 · 0 评论 -
【Linux】线程的终止
线程的终止分为两种情况,一是随着它所属进程的终止而终止,二是仅有单个线程自己终止。 对于第一种进程终止的情况:如果进程中的任意线程调用了exit、_Exit、或_exit,那么整个进程就会终止,当然属于这个进程的所有线程也会相应终止。如果线程收到一个信号,这个信号的默认动作是终止进程,那么整个进程会被终止。对于第二种单个线程终止的情况,线程可以通过以下三种方式退出,而不会终止整个进...原创 2018-02-18 18:11:02 · 251 阅读 · 0 评论 -
【Linux】I/O多路复用—select和pselect
select函数#include <sys/select.h>int select(int maxfdp1, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds, struct timeval *restrict tvptr); 返回...原创 2018-03-09 10:47:09 · 911 阅读 · 0 评论 -
【Linux】互斥量属性
1.属性类型:pthread_mutexattr_t该类型是一个结构,其中存放了互斥量的各属性字段。在对互斥量初始化时,可以使用PTHREAD_MUTEX_INITIALIZER常量初始化,或在互斥量的初始化函数中的属性参数传递空指针。这样得到互斥量为默认属性。2.初始化与反始化对于非默认属性,可使用如下的函数对pthread_mutexattr_t结构进行初始化和反初始化。初始化后的...原创 2018-03-01 19:23:51 · 605 阅读 · 0 评论 -
【Linux】I/O多路复用—poll
poll类似于select,但是接口有所不同。原型#include <poll.h>int poll(struct pollfd fdarray[], nfds_t nfds, int timeout);返回值:准备就绪的描述符数;若超时,返回0;若出错,返回-1与select不同,poll不是构造三个描述符集,而是使用一个pollfd结构的数组,每个元素指定一个描...原创 2018-03-09 17:24:50 · 173 阅读 · 0 评论 -
【Linux】线程同步—互斥量
在讲互斥量之前,先明确下面两个概念: 竞争条件:两个或多个进程(或线程)读写某些共享数据,最终结果取决于进程(或线程)运行的精确时序,被称为竞争条件。 临界区: 对共享内存进行访问的程序片段。 通过适当安排使得两个进程(或线程)不可能同时处于临界区,就能够避免竞争条件。那么如何才能避免竞争条件呢?如何才能使两个线程不能同时访问共享资源呢?关键是要互斥,即当一个线程在使用一个共享资源时,其...原创 2018-02-23 11:48:44 · 202 阅读 · 0 评论 -
【Linux】存储映射I/O—mmap
存储映射I/O能将一个磁盘文件映射到存储空间中的一个缓冲区上,于是可以用对缓冲区的读写代替对磁盘文件的读写,这样就可以在不使用read和write的情况下执行I/O。为了实现这种功能,应首先将一个给定的文件映射到一个存储区域中,这由mmap函数实现。 注:子进程能够通过fork继承父进程的存储映射区。mmap函数#include <sys/mman.h>void *...原创 2018-03-09 20:41:13 · 252 阅读 · 0 评论 -
【Linux】线程同步—读写锁
读写锁与互斥量类似,不过读写锁允许更高的并行性。互斥量只有锁住和不加锁两种状态,且一次只有一个线程可以对其加锁。而读写锁有三种状态:读模式加锁状态,写模式加锁状态,不加锁状态。读写锁具有如下特点:一次只有一个线程可以占有写模式的读写锁,但多个线程可以同时占有读模式的读写锁。在写加锁状态下,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞。在读加锁状态下,所有试图以读模式对它加锁的...原创 2018-02-24 16:06:06 · 181 阅读 · 0 评论 -
Linux--线程池与进程池及线程池的简单实现
转载地址:http://blog.csdn.net/sayhello_world/article/details/72829329池由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段...转载 2018-03-11 10:56:43 · 316 阅读 · 0 评论 -
Linux下C程序的编译和链接
这篇博文是在读了《CSAPP》中的链接部分后做的总结和摘录。linux编译过程命令:gcc -o prog main.c 过程: main.c —>预处理器(cpp)—>main.i —>编译器(ccl) —>main.s —>汇编器(as)—>main.o —>链接器(ld)—>prog main.i — ASCII码中间文件 ...原创 2018-02-13 16:34:10 · 936 阅读 · 0 评论 -
【Linux】线程特定数据
概述线程特定数据(线程私有数据)是存储和查询某个特定线程相关数据的一种机制,使用这种机制是因为我们希望每个线程可以访问它自己单独的数据副本,而不需要担心与其他线程的访问同步问题。 线程的好处就在于促进了进程中数据和属性的共享,那么设计线程私有数据的用意是什么呢?有如下两点原因:有时候需要维护基于每个线程的数据,而建立一个全局数组并通过线程号作为索引这种方式并不方便,并且对数组的访问无法...原创 2018-03-06 20:56:20 · 224 阅读 · 0 评论 -
写一个简单的makefile
简单说明一下makefile的基本语法target...: prerequisites... command ...冒号前的文件依赖于冒号后的文件,就是说如果prerequisites的最后修改时间晚于target,那么就会执行后面的命令command来生成新的target文件。command为普通的shell命令,注意命令前要缩进。 另外makefile语法中.o文件会被自动依赖原创 2017-10-28 20:58:43 · 248 阅读 · 0 评论 -
APUE(习题3.2)实现与dup2功能相同的函数
函数原型int dup(int fd);int dup2(int fd, int fd2);int mydup2(int fd, int fd2);由于题目要求不能使用fcntl函数,所以考虑使用dup函数来实现,思路如下:首先对于参数fd2,应当大于等于当前未使用的最小文件描述符,那么如何确定这个最小值呢?想到dup函数的返回值就是dup函数被调用前最小的未使用的文件描述符,设它为fd_mi原创 2017-10-25 17:25:31 · 350 阅读 · 0 评论 -
linux常用命令总结(持续添加)
记录linux学习过程中接触的常用命令,会随学习进度持续添加…关机与重启shutdown -h now 立即关机 -h x x分钟后关机 -r now 立即重启 -r x x分钟过后重启 -r xx:xx xx:xx时刻重启init init 0 关机 init 1 重启reboot 重启 halt 关机查看文原创 2017-09-27 16:42:00 · 258 阅读 · 0 评论 -
用select实现TCP回射程序(服务器及客户端)
该程序系参考《UNP》来编写的,主要用来练习select及shutdown函数的使用。服务器代码#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/types.h>#include <arpa/inet.h>#include <netinet/in.h>原创 2017-11-29 16:51:35 · 988 阅读 · 0 评论 -
C语言可变参数和格式化输出
可变参数我们知道在C++中可以通过函数重载的方式为函数提供接受可变个参数的功能,而在C语言中并没有重载的机制,不过C语言仍然提供了在头文件< stdarg.h >中提供了类似的功能。 在头文件中提供了va_list类型来存放可变参数列表(这个类型应该是一个指针),以及三个宏来实现相关的操作,三个宏的原型如下:void va_start(va_list ap, last_arg)//这个宏初始化原创 2017-12-09 15:48:00 · 2243 阅读 · 0 评论 -
记一个关于标准IO流缓冲区的有趣例子
有如下一段代码#include <stdio.h>#include <unistd.h>int main() { printf("#\n"); write(1, "123", 3);}它的输出如下#123这段程序调用了printf和write两个函数,分别对应于带缓冲的流式IO和没有缓冲的直接IO。两个函数先后向屏幕输出“#\n”和“123”这两个字符串,这样的结果在我们的意料原创 2017-12-03 16:38:35 · 342 阅读 · 0 评论 -
【linux】open函数创建新文件及umask函数使用
首先我们来看一下open函数的原型#include <fcntl.h>int open(const char *path, int oflag,.../*mode_t mode*/); //返回值:若成功,返回文件描述符;若失败,返回-1由函数原型可知open函数有一个可变参数mode,当使用open函数创建新文件时,需选用常量O_CREAT为构成参数原创 2017-12-14 13:44:58 · 3939 阅读 · 0 评论 -
C语言标准I/O库中流的读写与定位
不同于像read,write这样围绕文件描述符进行直接I/O的函数,C语言标准I/O库中的操作都是围绕流进行的。当我们打开或创建一个文件时,就会将一个流与该文件关联。 在流式的I/O操作中,系统会为操作分配缓冲区,以减少对read、write的调用次数。这是因为read、write,调用所耗费的时间要大于普通的函数调用,为什么更耗时我是这样理解的:read、write针对的是文件也即是磁盘中数原创 2017-11-26 17:21:23 · 723 阅读 · 0 评论 -
一个简单的UDP回射程序—总结UDP程序的基本结构
UDP 是面向数据报的无连接的传输协议,这与面向字节流的TCP协议十分不同。所以使用socket编写的UDP程序与TCP程序也是有着本质上的区别的。 下面给出一个典型的UDP客户/服务程序的函数调用过程:服务器: socket() –> bind() –> recvfrom() –> sendto() 客户: socket() –> sendto() –> recvfrom() –> c原创 2018-02-03 18:34:38 · 1372 阅读 · 0 评论 -
【Linux】线程同步—条件变量
条件变量是pthread提供的另一种线程间同步机制。互斥量用于允许或阻塞对临界区的访问,而条件变量则允许线程由于一些未达到的条件而阻塞。互斥量和条件变量往往是一起使用的。 考虑一个生产者—消费者问题,一个线程将数据写入缓冲区,另一个线程将数据从缓冲区取出。如果生产者发现缓冲区中没有空槽可以使用,它将不得不阻塞直到由空槽可用。生产者可以使用互斥量来对缓冲区进行原子性的检查,不用担心受其他线程影响。...原创 2018-02-26 17:23:09 · 158 阅读 · 0 评论 -
linux下pthread的编译
今天在linux下写一个多线程程序时,在.c 文件中包含了头文件< pthread.h> ,但是编译时却报错: 对‘pthread_create’未定义的引用 上网查了下,原来pthread库不是linux默认的库,所以在编译时要手动链接,做法如下: gcc mian.c -lpthread由于我是在CLion下写的代码,所以要想让CLion支持自动链接pthread库,需要...原创 2018-02-12 18:23:13 · 6451 阅读 · 0 评论 -
epoll中监听套接字的触发模式
我们知道epoll有两种触发模式:水平触发(LT)和边缘触发(ET)LT模式若数据可读,epoll返回可读事件 若开发者没有把数据完全读完,epoll会不断通知数据可读,直到数据全部被读取。 若socket可写,epoll返回可写事件,而且是只要socket发送缓冲区未满,就一直通知可写事件。 优点是对于read操作比较简单,只要有read事件就读,读多读少都可以。 E...原创 2018-05-21 19:26:21 · 1968 阅读 · 0 评论