Linux的学习
文章平均质量分 91
啊啊啊啊啊啊啊阿
hello world
展开
-
make工程管理器与Makefile
相比于gcc命令,通过make工程管理器编译程序则更加高效。GCC提供的Make是半自动编译,因为编译规则是人工编写的程序,将保存在Makefile文件中。Make工程管理器具有以下两个优点: 1.使用方便。通过命令即可根据Makefile中的编译规则对程序进行编译 2.调试效率高。make会对每个源文件的时间进行判断,只有被修改过的文件才会进行编译,大大减少了编译工作量原创 2016-07-11 09:00:57 · 582 阅读 · 0 评论 -
shell之用户定义的变量
变量名=变量值注:定义变量时,变量名前面不加“$”;给变量赋值时,等号两边一定不能留空格,若变量中本身就包含空格,整个字符串就需要用双引号建议所有变量名用大写字母表示以区分变量名和命令名readly 变量名建立的变量只是当前shell的局部变量,所以不能被shell运行的其他命令或程序利用export 变量名也可以在给变量赋值时同时使用export 变量名 = 变量值原创 2016-10-07 22:21:04 · 449 阅读 · 0 评论 -
使用线程完成简单的生产者和消费者
#include #include #include #include #define MAX_SIZE 1024sem_t mutex;sem_t full;char src[MAX_SIZE];void *consumer(){ while(1) { sem_wait(&mutex); printf("You wrote is原创 2016-10-30 00:28:05 · 259 阅读 · 0 评论 -
进程与线程的区别
进程与线程的区别进程: 1.进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 2.进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。 3.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 4.每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,因此转载 2016-10-30 22:53:59 · 175 阅读 · 0 评论 -
linux 文件锁
多用户多任务操作系统中非常重要的一个内容就是文件锁。用户在更新文件时,期望可以使用某种机制,防止两种进程同时更新文件同一区域而造成丢失,或者防止文件内容在未更新完毕时被读取等并发引起的问题,这种机制就是文件锁。 进程在操作文件期间,可以使用文件锁,锁定文件中的敏感部分,防止其他进程越权操作该部分数据。函数fcntl提供了对文件任意区域置锁的能力,既可以锁住全部文件,又可以锁住文件的部分转载 2016-10-20 20:42:18 · 171 阅读 · 0 评论 -
线程函数
函数pthread_create 作用:创建线程 函数原型:int pthread_create(pthread_t * tidp,const pthread_attr_t*attr,void*(*start_rtn)(void),void*arg)参数: tidp:线程id attr: 线程属性(通常为空) start_rtn:线程要执行的函数 arg:start_rtn原创 2016-10-31 22:47:33 · 367 阅读 · 0 评论 -
linux C语言 数据库sqlite3的添加,删除,查看
inux下数据库sqlite3的添加,删除,查看。这个程序需要先在命令下创建表。程序:#include #include #include static sqlite3 *db = NULL;static char *errmsg = NULL;char ** result = NULL;int num = 0;int display(voi原创 2016-11-01 23:17:34 · 735 阅读 · 0 评论 -
C/S和B/S的区别以及用法
C/S和B/S结构概念1.什么是C/S结构C/S (Client/Server)结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。C/S结构可以看做是胖客户端架构。客户端实现绝大多数的业务逻辑处理和界面展示,作为客户端的部分需要承受很大的压力,从分利用客户端的资源,对客原创 2016-12-10 17:44:49 · 1062 阅读 · 0 评论 -
进程和线程间的联系和区别
进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了转载 2016-11-22 21:54:44 · 277 阅读 · 0 评论 -
Linux下常用命令详解
gedit 显示行数在菜单栏的编辑->首选项 中有个显示行号的checkbox,选中即可。 根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 linux绝对路径和相对路径绝对路径是从/(也被称为根目录)开始的,比如/usr、/etc/X11。相对路径是以 .原创 2016-11-26 21:43:55 · 346 阅读 · 0 评论 -
DNS
DNS是域名系统的缩写,是因特网的一项核心服务,DN是一个分布式的数据库,主要用来把主机名转换为IP地址。 即www.baidu.com 转化为 61.135.169.121 它允许服务器改变IP,但是名字不变,这就大大增加了服务器的灵活性与动态性DNS服务器工作的具体过程:1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映转载 2016-12-14 23:18:29 · 212 阅读 · 0 评论 -
http协议
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模转载 2016-12-13 21:28:30 · 263 阅读 · 0 评论 -
如何让UDP实现可靠传输
如何让UDP实现可靠传输自定义通讯协议,在应用层定义一些可靠的协议,比如检测包的顺序,重复包等问题,如果没有收到对方的ACK,重新发包UDP没有Delievery Garuantee,也没有顺序保证,所以如果你要求你的数据发送与接受既要高效,又要保证有序,收包确认等,你就需要在UDP协议上构建自己的协议。比如RTCP,RTP协议就是在UPD协议之上专门为H.323协议簇上的IP电话转载 2016-12-11 17:36:07 · 397 阅读 · 0 评论 -
三次握手,四次挥手
TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明原创 2016-12-08 22:16:39 · 504 阅读 · 0 评论 -
TCP和UDP的区别,如何选择使用
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。UDP(User Datagram Protocol) UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。 即使是出现网络拥堵的情况下,UDP也无法进行流转载 2016-12-09 21:54:41 · 730 阅读 · 0 评论 -
I/O多路转接
#include #include #include #include #include #include #include #include #include #include #include /* 宏定义端口号 */ #define portnumber 8000 #define MAX_LINE 80原创 2016-12-05 22:27:02 · 196 阅读 · 0 评论 -
exec函数族
exec家族一共有六个函数,分别是:(1)int execl(const char *path, const char *arg, ……); (2)int execle(const char path, const char *arg, …… , char const envp[]); (3)int execv(const char *path, char *const argv[转载 2016-10-19 20:08:03 · 237 阅读 · 0 评论 -
信号量
信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。二值信号灯:信号灯的值只能取0或1,类似于互斥锁。 但两者有不同:信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值;互斥锁更强调进程,占用资源的进程使用完资源后,必须由进程本身来解锁。计数信号灯:信原创 2016-10-28 23:59:23 · 173 阅读 · 0 评论 -
linux网络编程之UDP
UDP前面已经讲过tcp网络通信,然后tcp每次通信都要进行三次握手连接,虽然传输的可靠性比较高,但对于一些及时性的数据的传输显得太过费时,所以就有了UDP这种无连接通信,但数据容易出错。udpserver.c[objc] view plain copy #include .h>原创 2016-11-09 23:31:13 · 212 阅读 · 0 评论 -
sizeof 和strlen()的区别
char *ptr = "hello world";char ptr[100] = "hello world";char ptr[] = "hello world";上述三行代码每行的sizeof(ptr)和strlen(ptr)的值分别是多少呢?首先第一行:sizeof(ptr)=4 strlen(ptr)=11第二行:sizeof(ptr)=100 st原创 2016-07-11 09:55:26 · 366 阅读 · 0 评论 -
GCC的浅层理解
gcc的工作流程1.预处理预处理阶段时不做语法检查而是执行以下步骤a.头文件展开b.进行宏替换c.进行条件编译总的来说就是“#”开头的代码在这一过程中编译gcc -E test.c > test.i /*对源文件test.c进行预处理并生成预处理文件test.i */2.编译编译时进行下列分析1.词法分析,主要负责检查关键字、标识符是否准确2.语法分析,主要负责检查程序中语句的语法是否准确原创 2016-07-06 20:35:57 · 259 阅读 · 0 评论 -
shell之预定义变量
$#:位置参数的数量$*:所有位置参数的内容$?:命令执行后返回的状态用于检查上一个命令执行是否正确$$:当前进程的进程号用作临时文件的名字以保证临时文件不会重复$!:后台运行的最后一个进程号$0:当前执行的进程名原创 2016-10-08 23:23:58 · 279 阅读 · 0 评论 -
如果一个进程出了问题,怎么判断它是否运行?能不能重启这个进程?尝试使用守护进程来操作
可以用shell编写一个脚本来判断。能。 * 1.守护进程守护进程的最大特点就是脱离了中断,Linux提供了一个系统调用daemon(),要想自定义实现的话,主要包括以下六个步骤:1.第一步是使用umask函数,把所有的文件屏蔽字置0。文件屏蔽字是可以继承的,当你有相关操作时,如果你要创建一个文件,继承过来的屏蔽字可能阻止你创建相关属性的文件。比如:如果你明确的创建一个文件为组可读,组原创 2016-10-21 22:43:00 · 1631 阅读 · 0 评论 -
linux进程间通信(一)
进程创建的相关函数:1.getpid函数作用:获取进程识别码函数原型:pid_t getpid(void)返回值:目的进程的进程号头文件:#include2.fork函数作用:创建一个进程函数原型:pid_t fork(void)返回值: = 0 表示当前创建的子进程 > 0原创 2016-10-22 21:57:34 · 168 阅读 · 0 评论 -
管道通信
管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。 数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞。 管道包括无名管道和有名管道两种原创 2016-10-24 21:57:42 · 348 阅读 · 0 评论 -
如何设置Vim的配置(详细)
我的vim配置主要有以下优点:1.按F5可以直接编译并执行C++、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试。2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改。3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码。4.按“F2”可以直接消除代码中的空行。5.“F转载 2016-10-14 21:34:04 · 641 阅读 · 0 评论 -
校验
一、奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 校验方法 奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为原创 2016-11-05 20:44:38 · 562 阅读 · 0 评论 -
信号通讯
信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号: 1、当用户按某些按键时,产生信号 2、硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号 3、进程用kill函数将信号发送给另一个进程原创 2016-10-25 20:28:47 · 294 阅读 · 0 评论 -
LINUX拷贝文件的源程序
#include #include #include #include #include #define SIZE 1024int main(int argc, char *argv[]){ int to_fd,from_fd; int bytes_read,bytes_write; char buffer[SIZE]; char *ptr;原创 2016-10-16 00:22:45 · 284 阅读 · 0 评论 -
TCP/IP相关的网络编程函数
1.socket函数原型:int socket(int domain,int type,int protocol)函数作用:建立一个新的socket套接字函数参数:domain:建立何种地址类型;AF_INET,IPV4的 网络协议 AF_INET6,IPV6的网络协议 type:SOCK_STREAM; TCP,面向数据流的 SOCK_DGRAM; UDP,原创 2016-11-06 23:08:52 · 320 阅读 · 0 评论 -
共享内存
共享内存实现分为两个步骤:1.创建共享、打开共享内存,使用shmget函数2.映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数3. 分离共享内存4. 控制、删除共享内存下面介绍共享内存要用到的函数:shmget函数作用:在内核中创建内存函数原型:int shmget ( key_t key, int size, int s原创 2016-10-26 18:00:28 · 349 阅读 · 0 评论 -
初识shell
什么是shell?shell就是一个命令行解释器,为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止,甚至编写一些程序。shell基本语法1.输入输出重定向:">"或"例如:command>file:将命令的输出结果定向到一个文件2.管道pipe:可以将某一个程序的输出送到另一个程序的输入语法如下:co原创 2016-10-02 22:21:33 · 151 阅读 · 0 评论 -
消息队列
unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式.进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息目前主要有两种类型的消息队列: POSIX消息队列以及系统V消息队列,系统V原创 2016-10-27 20:44:24 · 203 阅读 · 0 评论 -
shell定义的变量环境
HOME:用于保存注册目录的完全路径名PATH:用于保存用冒号分割的目录路径名TERM:终端类型UID:当前用户的标识符,取值是有数字构成的字符串PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化PS1:主提示符,在特权用户下默认是“#”,普通用户下默认的是“$”PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当原创 2016-10-05 22:37:15 · 256 阅读 · 0 评论 -
IO多路复用适用场合
IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。转载 2017-01-19 22:01:01 · 1274 阅读 · 0 评论