
Linux 环境编程
文章平均质量分 85
men_wen
这个作者很懒,什么都没留下…
展开
-
Linux c --- 数组与字符串
Linux c — 数组与字符串1.数组与字符串的常用函数1.1 memset首先可以用man命令查看一下memset函数的使用手册 关于man命令在linux下开发的使用 man 1 +命令 如:ls,man man 2 +系统借口 如:open,close man 2 +C语言库函数 如:fopen,memsetNAME :函数名和该函数的释义S原创 2016-09-14 19:41:11 · 4390 阅读 · 0 评论 -
APUE笔记---网络IPC:socket套接字使用+聊天程序
APUE笔记—第16章 网络IPC:套接字1. 套接字描述符的创建与销毁套接字是通信端点的抽象,套接字描述符是一种文件描述符。1.1创建套接字描述符#include <sys/types.h> #include <sys/socket.h>int socket(int domain, int type, int protocol);//返回值:若成功,返回文件(套接字)描述符,若出错,原创 2016-11-27 23:20:51 · 720 阅读 · 2 评论 -
APUE笔记---第八章 进程控制(函数fork、exit、wait等)
APUE笔记—第八章 进程控制1. 进程标识每一个进程都有一个非负整数作为唯一进程ID。所以应用程序有时把进程ID作为名字的一部分来创建一个唯一的文件名。虽然进程是唯一的,但是进程ID是可复用的。进程ID为0的进程通常是调度进程,常常被称为交换进程(swapper)。该进程是内核的一部分,不执行任何磁盘上的程序,也称为系统进程。进程ID为1通常是init进程,在自举过程结束时由内核调用。此进原创 2016-11-10 22:48:43 · 1825 阅读 · 0 评论 -
APUE笔记---第七章 进程环境
APUE笔记—第7章 进程环境1. main函数C程序的总是从main函数开始执行。main函数的原型:int main(int argc, char *argv[])参数argc是命令行参数的数目参数argv是指向参数的各个指针所构成的数组在内核执行C程序时,在调用main函数之前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编辑器原创 2016-11-05 18:52:19 · 648 阅读 · 0 评论 -
APUE读书笔记---进程间通信(IPC)之管道和有名管道(FIFO)
APUE读书笔记—进程间通信(IPC)之管道和有名管道(FIFO)1. 管道pipe函数可以创建管道,提供一个单向数据流(半双工)。#include <unistd.h>int pipe(int pipefd[2]);//返回值:若成功,返回0,若出错,返回-1该函数返回两个文件描述符,fd[0],fd[1]。前者打开来读,后者打开来写。所以管道在用户程序看起来像是一个打开的文件,通过read(原创 2017-03-01 20:34:15 · 895 阅读 · 0 评论 -
APUE读书笔记---进程间通信(IPC)之共享内存区mmap
APUE读书笔记—进程间通信(IPC)之共享内存区mmap1. 共享内存区概述共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不在涉及内核。 “不再涉及内核”含义:进程不再通过执行任何进入内核的系统调用来彼此传递数据。管道、FIFO和消息队列这些IPC形式,当两个进程要交换信息时,这些信息必须经由内核传递。通过让两个或多个进程共享一个内存原创 2017-03-03 15:37:25 · 681 阅读 · 0 评论 -
APUE读书笔记---进程间通信之POSIX共享内存区
APUE读书笔记—进程间通信之POSIX共享内存区1. 概述无亲缘关系进程间共享内存区的方法:内存映射文件(memory-mapped file),有open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间的一个文件。共享内存对象(shared-memory object),由shm_open打开一个POSIX IPC名字(路径名),所返回的描述符由mmap函数映射到当前进程的地址空原创 2017-03-03 23:58:47 · 531 阅读 · 0 评论 -
APUE读书笔记---System v消息队列
APUE读书笔记—System v消息队列1. 概述System V消息队列使用消息队列标识符(message queue identifier)标识,具有足够特权的任何进程都可以往给定队列放置一个消息,具有足够特权的任何进程都可以从一个队列中读出一个消息。在内核中,维护了一个定义在struct msqid_ds { struct ipc_perm msg_perm; //内核给每个IP原创 2017-03-18 07:36:19 · 697 阅读 · 0 评论 -
APUE读书笔记--POSIX消息队列
UNP (Vol2) 读书笔记–POSIX消息队列1. 概述消息队列可以认为是一个消息链表,有足够的写权限的线程可以往队列中放置消息,有足够的读权限的线程可以从队列中取走消息。每个消息都是一个记录(record),有一个长度和优先级。消息队列具有随内核的持续性 随内核持续性:IPC对象一直存在到内核重新自举或显式删除该对象为止。2. mq_open、mq_close、mq_unlink函数原创 2017-03-06 12:08:23 · 675 阅读 · 0 评论 -
APUE读书笔记---第10章 信号
APUE读书笔记—第10章 信号1. 信号概念信号是软件中断,信号提供了一种处理异步事件的方法。信号名在 < signal.h > 都被定义为正整数常量。不存在编号为0的信号。1.1 产生信号的条件:当用户按某写终端按键时,引发终端产生的信号。如:Ctrl+C产生SIGINT信号。硬件异常产生信号。如除零错,无效的内存应用产生SIGSEGV信号。进程调用kill函数可将任一信号发送给另原创 2017-03-10 19:09:17 · 494 阅读 · 0 评论 -
Linux中getopt函数、optind等变量使用详解
getopt函数、optind等变量使用详解最近在学习《Unix网络编程》vol2时,发现书中例子经常使用一个命令行解析getopt函数,因为函数声明比较特别,根据自己摸索,遂总结出使用方法。1. getopt函数的声明该函数是由Unix标准库提供的函数,查看命令man 3 getopt#include <unistd.h>int getopt(int argc, char * const argv原创 2017-03-13 22:38:10 · 30770 阅读 · 2 评论 -
gcc 编译工具(下)--- 外部库、共享库、静态库、动态库
gcc 编译工具(下)— 外部库、共享库、静态库、动态库1. 头文件与库文件在使用C语言和其他语言进行程序设计时,需要头文件来提供对常数的定义和对系统及函数调用的声明。库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的。他们通常有一组互相关联的用来完成某项常见工作的函数构成。比如用来处理屏幕显式情况的函数(ncurses库)和数据库访问例程(dbm库)等。 使用库的好处:模块原创 2017-07-16 15:17:34 · 2870 阅读 · 0 评论 -
APUE笔记---线程概念、创建、终止和属性
APUE读书笔记—第11章 线程1. 线程的概念线程(thread)就是运行在进程上下文中的逻辑流。 逻辑流:程序计数器PC(唯一地对应存放可执行目标文件指令的地方)的序列叫做逻辑控制流,简称逻辑流。简单说就是二进制序列。每一个线程都有它自己的线程上下文(thread context),包括一个唯一的整数线程ID(TID)、栈、栈指针、程序计数器、通用目的寄存器和条件码。 线程上下文:进程上下原创 2017-02-25 15:01:33 · 428 阅读 · 0 评论 -
APUE笔记---线程同步之互斥锁、读写锁、条件变量、POSIX信号量
APUE笔记—第12章 线程同步1. 线程要同步的原因共享资源,多个线程都可对共享资源操作线程操作共享资源的先后顺序不确定处理器对存储器的操作一般不是原子操作下面代码演示线程对修改同一变量发生的问题,首先了解增量操作的具体步骤: 1. 从内存读入寄存器 2. 在寄存器中对变量进行增量操作 3. 把新值写会内存#include <stdio.h>#include <stdlib.h>原创 2017-02-27 23:24:44 · 898 阅读 · 0 评论 -
Linux c — void类型变量和指针
Linux c — void类型变量和指针1.什么是void?void在英文中形容词的意思就是无效的,空的,空虚的意思,在C语言中就是空类型的意思。 在C语言中,使用void这个类型时,有如下规则:void 只能修饰函数,不能修饰变量void * 函数、变量都可以被修饰2.void的使用2.1 void修饰变量用void 定义一个a,编译后会报错void a;//void.c: 在函数‘mai原创 2016-09-17 21:39:08 · 3988 阅读 · 3 评论 -
APUE笔记—C语言标准IO库之文件IO
APUE笔记—C语言标准IO库之文件IO注:本文参考APUE第五章1.标准IO库与系统调用文件IO区别标准IO库:面向应用开发,为程序员提供一套可移植的API,并且标准IO库处理了很多细节,如缓冲区分配,以优化的方式执行IO库等。系统调用:面向底层的硬件,在Linux中,标准IO库的函数一把都要调用系统调用函数,系统调用时与操作系统相关的。2.流和FILE对象标准IO库:是围绕流进行的,当打原创 2016-10-11 21:51:10 · 1518 阅读 · 0 评论 -
指针数组与数组指针详解
指针数组与数组指针详解1.什么是指针数组和数组指针?指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。数组指针:数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 根原创 2016-09-28 21:21:20 · 253066 阅读 · 56 评论 -
函数指针与回调函数详解
函数指针与回调函数详解1.什么是函数指针?函数指针就是指针。这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址。这类似于数组名就是数组的首地址。我们可以通过反汇编直观的查看到函数名和函数地址的关系。080483c4 <rfun>: 80483c4: 55 push %ebp 80483c5: 89 e5原创 2016-09-29 14:08:30 · 11905 阅读 · 2 评论 -
APUE笔记---第三章文件I/O
APUE笔记—第三章文件I/O1. C标准库函数与系统函数的区别用户程序可以直接访问系统函数用户程序也可以调用C标准库函数,C标准库函数间接调用系统函数 2. 文件描述符对于内核而言,所有打开的文件都是通过文件描述符引用,文件描述符是一个非负整数。通常一个进程默认会打开三个文件描述符STDIN_FILENO 0STDOUT_FILENO 1STDERR_FILENO 22.1原创 2016-10-26 21:20:34 · 579 阅读 · 0 评论 -
C语言的可变参函数
C语言的可变参函数1.什么是可变参函数可变参函数,顾其名而思义,就是该函数的参数数目不固定,例如我们的格式化输出函数 int printf(const char *fmt, ...)这个函数的“…”参数就代表它是个可变参的函数。这个函数第一个参数一定是一个字符串,通过字符串中的“d%”,“%s”等等来对应后面的参数数量,这样以来就可以正确解析函数的参数。2.可变参函数的原理实现可变参函数,依赖于三个原创 2016-10-19 22:19:50 · 1510 阅读 · 0 评论 -
APUE笔记---第四章Linux文件系统与文件目录操作
APUE笔记—第四章Linux文件系统与文件目录操作1. linux文件系统1.1 ext2文件系统我们可以把一个磁盘分成一个或多个分区,每个分区可以包含一个文件系统。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。 - 文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确定的,例如mke2fs的-b选项可以设定块大小为1024、2048或4096字节。而上图中启动原创 2016-10-30 16:28:05 · 1068 阅读 · 0 评论 -
APUE笔记---第六章系统数据文件和信息操作
APUE笔记—第六章系统数据文件和信息操作1. 口令文件Linux系统口令文件包含以下字段:struct passwd { char *pw_name; /* username */ char *pw_passwd; /* user password */ uid_t pw_uid; /* user ID */ gid_t原创 2016-10-31 22:21:32 · 622 阅读 · 0 评论 -
Linux网络编程---I/O复用模型之select
Linux网络编程—I/O复用模型之select1. IO复用模型IO复用能够预先告知内核,一旦发现进程指定的一个或者多个IO条件就绪,它就通知进程。IO复用阻塞在select或poll系统调用上,而不是阻塞在真正的IO系统调用上。2. 函数selectselect函数能够告知内核对哪些描述符(不局限于套接字)感兴趣以及等待多长事件#include <sys/time.h>#include原创 2016-12-04 21:00:15 · 807 阅读 · 0 评论 -
Linux网络编程---I/O复用模型之poll
Linux网络编程—I/O复用模型之poll1.函数pollpoll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);//返回值:若成功,返回就绪的描述符个数,若超时则为0,若出错则为-1fds是指向一个pol原创 2016-12-04 21:05:42 · 937 阅读 · 0 评论 -
Linux网络编程---I/O复用模型之epoll
Linux网络编程—I/O复用模型之epoll1. epoll模型简介epoll是Linux多路服用IO接口select/poll的加强版,e对应的英文单词就是enhancement,中文翻译为增强,加强,提高,充实的意思。所以epoll模型会显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。epoll把用户关心的文件描述符上的时间放在内核的一个事件表中,无需像select和po原创 2016-12-04 21:08:11 · 14323 阅读 · 3 评论 -
gcc 编译工具(上)--- 编译过程和原理浅析
gcc 编译工具(上)— 编译过程和原理浅析1. 什么是gccgcc(GNU C Compiler)编译器的作者是Richard Stallman,也是GNU项目的奠基者。gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器,现在已经支持多种语言了,如C、C++、Java、Pascal、Ada、COBOL语言等。gcc支持多种硬件平台,甚至对Don Knuth原创 2017-07-16 12:53:58 · 2824 阅读 · 0 评论