Linux
文章平均质量分 59
Linux
拥抱@
时刻提醒自己:自信力 自控力 执行力 精准的语言表达能力 敏锐的逻辑思维
展开
-
三目运算的宏定义
三目运算的宏定义原创 2022-08-01 16:47:37 · 1020 阅读 · 1 评论 -
Linux之curl命令
文章参考:linux命令之curlcurl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。不带有任何参数时,curl 就是发出 GET 请求。$ curl https://www.example.com上面命令向www.example.com发出 GET 请求,服务器返回的内容会在命令行输出。CURL状态码列表状态码 | 状态原因原创 2021-07-26 15:50:45 · 752 阅读 · 0 评论 -
查看和调试core文件
1.core文件的生成开关和大小限制使用ulimit-c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。-c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit-c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。2.core文件的名称和生成路径若系统生成的core文件不带其它任何扩原创 2021-06-30 18:13:19 · 8279 阅读 · 0 评论 -
Linux学习——浅谈读写锁的使用
一、读写锁是什么?读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的。读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,读写锁的使用规则:只要没有写模式下的加锁,任...转载 2019-06-26 17:24:22 · 2406 阅读 · 0 评论 -
Linux学习——进程间通信之posix信号量的使用
1.概述信号量(semaphore)是一种提供不同进程间或者一个给定进程不同线程之间的同步。 分为POSIX信号量和SystemV信号量,这里先学习POSIX信号量。POSIX信号量又分为有名信号量和基于内存的信号量(无名信号量)。区别在于是否需要使用POSIX IPC名字来标识。NOTE:Linux操作系统中,POSIX有名信号量创建在虚拟文件系统中 一般挂载在/dev/shm,其名字以...转载 2019-06-26 17:03:38 · 570 阅读 · 0 评论 -
Linux: 浅谈连接文件ln
写在前面 在linux下面的连接文件有两种。一种是类似Windows的快捷方式功能的文件,可以让你快速连接到目标文件(或目录);另一种则是通过文件系统的iNode连接来产生新文件名,而不是产生新文件,这种称为硬连接(hard link)。这两个完全是不一样的东西。 1.hard link ...原创 2019-06-11 12:52:15 · 339 阅读 · 0 评论 -
Linux :数据流重定向
什么是数据流重定向? 一般来说,如果你要执行一个命令,这个命令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。标准输出与标准错误 简单地说,标准输出指的是命令执行所回传的正确的信息,而标准错误输出可以理解为命令执行失败后...原创 2019-06-11 00:18:58 · 388 阅读 · 0 评论 -
Linux学习—条件变量实现同步
与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主...原创 2019-06-20 12:46:43 · 1230 阅读 · 0 评论 -
Linux进程管理——fork()和写时复制
写在前面: 写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当发出fork( )系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程。这种行为是非常耗时的,因为它需要:· 为子进程的页表分配页面· 为子进程的页分配页面· 初始化...转载 2019-06-09 18:24:36 · 382 阅读 · 0 评论 -
Linux源码安装步骤
Linux上几乎所有的软件都经过了GPL授权,因此几乎所有的软件都会提供源码。而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。软件编译过程将源码编译成可供Linux运行的二进制文件一共需要两步:使用gcc编译器将源码编译成目标文件再次使用gcc编译器将目标文件链接成二进制文件这过程看似简单,实则不然。一个软...原创 2019-07-01 23:38:07 · 482 阅读 · 0 评论 -
Linux学习——系统调用dup()和dup2()
dup()和dup2()函数都可以用来复制一个文件描述符,原型为:int dup(int oldfd);int dup2(int oldfd, int newfd);函数执行成功返回新的文件描述符,失败则返回-1。dup()函数返回的新的文件描述符是当前可用文件描述符中最小数值,示例代码:int main(void){ int fd; int new_fd; ...原创 2019-07-01 23:49:58 · 412 阅读 · 0 评论 -
Centos7 部署Apache服务器
Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。 它的名字取自美国印第安人土著语,寓意着拥有高超的作战策略和无穷的耐性,在红帽RHEL5、6、7系统中一直作为着默认的Web服务程序而使用,并且也一直是红帽RHCSA和红帽RHCE的考试重点内容。Apache服务程序可以运行在Linux系统、Unix系统甚至是Windows...转载 2019-07-02 01:12:14 · 2232 阅读 · 1 评论 -
Linux线程学习——详解线程属性设置pthread_attr_init()与线程取消pthread_cancel()的用法
1.pthread_attr_init() 设置线程属性pthread_attr_init,函数,作用是初始化一个线程对象的属性,需要pthread_attr_destroy函数对其去除初始化。头文件#include<pthread.h>函数声明int pthread_attr_init(pthread_attr_t *attr);返回值返回0,表示函数初始化对象成功...原创 2019-06-27 01:25:08 · 2039 阅读 · 0 评论 -
Linux——多路复用模型select/poll/epoll的总结【转需】
I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。 相关的实现代码之前的博客也已经给出,大家可以自行...转载 2019-07-13 09:11:22 · 145 阅读 · 0 评论 -
Linux学习——Gdb基本调试方法&&多线程调试
1.Gdb的基本调试示例代码//e.c #include <stdio.h> void debug(char *str){ printf("debug info :%s\n",str );}int main(int argc,char *argv[]){ int i,j; j=0; for(i=0;i<10;i++){ ...转载 2019-07-10 18:51:12 · 6027 阅读 · 0 评论 -
http项目——动态线程池的模拟实现
之前写http服务器的时候,用到了线程池去完成服务器的创建,之前的线程池实现参照:https://blog.csdn.net/tonglin12138/article/details/94035217。 但是之前给出的实现有一个最...原创 2019-07-29 15:39:01 · 388 阅读 · 0 评论 -
Linux环境下c++定时器的模拟实现
使用函数:#include <sys/time.h>int getitimer(int which, struct itimerval *value);int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);功能描述:获取或设定间歇计时器的值。系统为进程提供三种类型的...原创 2019-07-29 15:52:52 · 1440 阅读 · 0 评论 -
多线程环境下,主线程先退出,子线程会被强制退出吗?
1、进程中线程之间的关系线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(…))。main执行完之后, 会调用exit()。exit() 会让整个进程over终止,那所有线程自然都会退出。2、主线程先退出,子线程继续运行的方法在进程...原创 2019-09-01 15:36:24 · 3439 阅读 · 1 评论 -
剖析Linux线程常见问题
1.gettid()和pthread_self()的区别: 线程库 实际上由两部分组成:内核的线程支持+用户态的库支持(glibc),Linux在早期内核不支持线程的时候glibc就在库中以线程(就是用户态线程)的方式支持多线程了,POSIX thread只要求了用户编程的调用接口对内核接口没有要求。linux上的...原创 2019-06-09 16:40:51 · 406 阅读 · 0 评论 -
linux同步与异步、阻塞与非阻塞概念以及五种IO模型
1、概念剖析相信很多从事linux后台开发工作的都接触过同步&异步、阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞、异步就是非阻塞,下面我们先剖析下这几个概念分别是什么含义。同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等...转载 2019-04-23 10:10:02 · 645 阅读 · 0 评论 -
Linux网络编程:epoll具体用法介绍
写在前面 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,下面说下我们在编程时epoll具体的用法。epoll 主要采用对已就绪的 fd 进行轮询操作一、...原创 2019-04-23 09:58:51 · 511 阅读 · 0 评论 -
Linux探索---“句柄”
句柄:以下内容来自百度百科:句柄(handle),有多种意义,其中第一种是指程序设计,第二种是指Windows编程。现在大部分都是指程序设计/程序开发这类。第一种解释:句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。第二种解释:整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为...原创 2019-01-02 09:47:01 · 3190 阅读 · 0 评论 -
Linux探索---“用户态”和“内核态”的那点事
导语:在Linux学习中,我们应该经常会碰到“用户态”和“内核态”这两个概念;可能很多人觉得自己对于这方面感觉自己已经可以区分。但是可能你心中对这两个的概念却很模糊,被问到时就会支支吾吾,没法好好组织语言。所以,下面会带领大家进行一个完整的学习加以区分。先来看一下Linux体系架构:在这里先给大家推荐一本书:《鸟哥的linux》,不管是对于初学者还是其他都挺有帮助的。OK,不废话: 如...原创 2019-01-02 09:20:40 · 2522 阅读 · 0 评论 -
Linux探索:信号(Signal) 深度好文!
【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了几个简单的应用实例。【关键字】软中断信号,signal,sigaction,kill,sigque...转载 2019-01-02 10:12:57 · 374 阅读 · 0 评论 -
Linux:动静态库的详解及生成
写在前面:什么是“库” ?语言编程时,通常要建立一些用户函数。如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#include”命令将其包含到源程序之中,以提高编程效率。但在特定的程序中一般仅使用这些函数的一部分,若用上述方法包含所有函数,编译器在编译的时候会把所有包含进的函数都进行编译,这无疑会使源程序变得庞大而难于理解,并会影响执行效率。建立用户目标模块库(lib文件)可...原创 2019-01-06 14:14:09 · 291 阅读 · 0 评论 -
errno --详解
写在前面:当linux中的 api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息(1)void per...转载 2019-01-18 19:31:58 · 20396 阅读 · 0 评论 -
套接字编程---accept()相关详解
先看一下accept的使用: int new_sockfd; struct sockaddr_in cli_addr; len = sizeof(struct sockaddr_in); //int accept(int sockfd, struct sockaddr *addr, // socklen...原创 2019-01-18 20:52:51 · 954 阅读 · 0 评论 -
多路转接之---实现select版本的简单TCP服务器
2、select函数原型该函数准许进程指示内核等待多个事件中的任何一个发送,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒。函数原型如下:#include <sys/select.h>#include <sys/time.h>int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *ex...原创 2019-01-18 21:12:40 · 271 阅读 · 0 评论 -
Linux--深度认识"fork"函数
写在前面看似功能很简单的fork()函数,乱七八糟的东西实则有一大堆。这几天为了真正搞懂它的原理真的是让人几乎崩溃… ̄□ ̄|| 所以在这里做以总结。举个例子:#include &amp;amp;amp;amp;amp;lt;unistd.h&amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;gt;原创 2019-01-15 12:38:34 · 333 阅读 · 0 评论 -
Linux下多个进程可以同时打开同一个文件吗?文件描述符与打开文件的关系?
一:结论1.两个进程中分别产生生成两个独立的fd2.两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性3.进程可以通过系统调用对文件加锁,从而实现对文件内容的保护4.任何一个进程删除该文件时,另外一个进程不会立即出现读写失败5.两个进程可以分别读取文件的不同部分而不会相互影响6.一个进程对文件长度和内容的修改另外一个进程可以立即感知二:文件描述符与打开文件的关系?内核...原创 2019-01-15 13:03:23 · 10656 阅读 · 0 评论 -
汇总:Linux下文件操作接口
写在前面:文件描述符:对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传递给read或write。 按照惯例,UNIX系统shell使用文件描述符0与进程的标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与...原创 2019-01-16 21:46:45 · 2504 阅读 · 0 评论 -
Linux--- 简单实现 MyCopy
直接上代码:include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#define B原创 2019-01-17 00:20:05 · 1079 阅读 · 0 评论 -
Linux---带你区分"根目录" 和 "家目录"
写在前面:Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:总结:1 ~ 代表是home目录,也就是家目录, / 代表的是根目录2.用户登录后在 家目录 ,可用pwd命令查看,普通用户为 /home/用户名,root用户为/root 2. 用户登录后在 家目录 ,可用pwd命令查看,普通用户为 /home/用户名,root用户为/r...原创 2019-02-19 14:02:58 · 21993 阅读 · 0 评论 -
Linux标准输入输出: 2>&1
linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。STDIN是标准输入,默认从键盘读取信息;STDOUT是标准输出,默认将输出结果输出至终端;STDERR是标准错误,默认将输出结果输出至终端。由于STDOUT与STDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。 2&...原创 2019-03-06 23:35:35 · 1491 阅读 · 0 评论 -
Linux下压缩命令tar和zip
tartar命令是Linux中比较常用的解压与压缩命令。可以使用命令 (man tar) 命令来进行查看man的基本命令。下面举例说明一下tar 的基本命令。#tar -cvf sysconfig.tar /etc/sysconfig命令解释:将目录/etc/sysconfig/目录下的文件打包成文件sysconfig.tar文件,并且放在当前目录中(可以使用pwd命令查...原创 2019-03-18 10:30:06 · 661 阅读 · 0 评论 -
makefile中的.PHONY和all的作用
.PHONY(伪目标)伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签。伪目标通过PHONY来指明。 PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的妙处。1、如果我们指定的目标不是创建目标文件,而是使用makefile执行一些特定的命令,例如:clean: rm *.o...原创 2019-03-18 11:52:13 · 10911 阅读 · 2 评论 -
套接字编程中 "INADDR_ANY"的含义是什么?
"将sin_addr设置为INADDR_ANY"的含义是什么?INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思。比如一台电脑有3块网卡,分别连接三个网络,那么这台电脑就有3个ip地址了,如果某个应用程序需要监听某个端口,那他要监听哪个网卡地址的端口呢?如果绑定某个具体的ip地...转载 2019-03-18 17:31:42 · 767 阅读 · 0 评论 -
Linux虚拟机安装教程-Centos 6.5 百度云资源
链接:https://pan.baidu.com/share/init?surl=o8FTpRc 密码:bwme原创 2019-01-04 00:57:56 · 1729 阅读 · 0 评论