UNIX再学习
文章平均质量分 97
聚优致成
这个作者很懒,什么都没留下…
展开
-
UNIX再学习 -- 线程
终于要讲到线程部分,线程和进程让人够头痛的内容。一、线程概念老样子,我们还是按我们讲进程时的方式说起,参看:UNIX再学习 -- 进程环境首先需要了解下,什么是线程。Linux 下的线程,可能我们比较陌生,但是我们一直在玩 Windows 系统。应用程序文件、任务管理器,这些东西应该是很溜的。比如:查看详细信息,最上一列,右击选择列;找到线程打对勾。如下图,就可看到线程数了。通过上图我们可以看到原创 2017-05-10 11:18:54 · 2256 阅读 · 0 评论 -
UNIX再学习 -- 函数 system
ystem 函数执行 command 参数表示的命令行,并返回命令进程的终止状态。若 command 参数是一个空指针 (NULL),则仅当命令处理程序可用时,system 返回非 0 值,这一特征可以确定在一个给定的操作系统上是否支持 system 函数。在 UNIX 中,system 总是可用的。原创 2017-04-27 09:07:15 · 836 阅读 · 0 评论 -
UNIX再学习 -- 记录锁
APUE第 3 章,参看:UNIX再学习 -- 文件I/O fcntl 函数它的记录锁功能我们当时没讲。接下来就详细说明下。一、读写冲突1、如果两个或两个以上的进程同时向一个文件的某个特定的区域写入数据,那么最后写入文件的数据极有可能因为写操作的交错而产生混乱。2、如果一个进程写而其他进程同时在读一个文件的某个特定区域,那么读出的数据极有可能因为读写操作的交错而不完整。多个进程同时读一个文件的某原创 2017-05-17 10:32:04 · 1106 阅读 · 0 评论 -
UNIX再学习 -- exec 函数族
我们在讲,文件I/O的时候,简单提到过 exec 函数,讲到 vfork 的时候,也有用到。下面我们来详细介绍下它。参看:UNIX再学习 -- 文件I/O 参看:UNIX再学习 -- 函数 fork 和 vfork一、exec 函数待续原创 2017-04-25 16:11:36 · 1340 阅读 · 0 评论 -
UNIX再学习 -- 函数abort
abort 函数之前有讲过的,参看:C语言再学习 -- 关键字return和exit ()函数然后我们在讲 8 中进程终止时,也说过。参看:UNIX再学习 -- exit 和 wait 系列函数下面来详细讲一下它。一、函数 abort#include void abort(void);此函数无返回值1、函数功能abort 函数的功能是使程序异常终止2、函数解析abort 函数首先解除进程对 S原创 2017-05-08 17:00:56 · 1970 阅读 · 0 评论 -
UNIX再学习 -- 信号处理
一、闹钟、暂停和睡眠1、函数 alram#include unsigned int alarm(unsigned int seconds);返回值:返回 0 或先前所设闹钟的剩余秒数(1)函数功能使用 alarm 函数可以设置一个定时器(闹钟时间),在将来的某个时刻该定时器会超时。当定时器超时时,产生 SIGALRM 信号。如果忽略或不捕捉此信号,则其默认动作是终止调用该 alarm 函数的进原创 2017-05-04 13:34:56 · 1191 阅读 · 1 评论 -
UNIX再学习 -- exit 和 wait 系列函数
我们一开始讲进程环境时,就有提到了。进程有 8 种方式使进程终止。其中 5 种为正常终止,它们是:(1)在 main 函数中执行 return(2)调用 exit 函数,并不处理文件描述符,多进程(3)调用 _exit 或 _Exit(4)最后一个线程从其启动例程返回(5)从最后一个线程调用 pthread_exit异常终止有 3 种方式,它们是:(6)调用 abort,产生 SIGABRT 信号原创 2017-04-20 10:55:14 · 5327 阅读 · 0 评论 -
UNIX再学习 -- 守护进程(转)
守护进程是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。因此它们没有控制终端,所以说它们是在后台运行的。UNIX 系统有很多守护进程,它们执行日常事务活动。参看:守护进程一、什么是守护进程守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某原创 2017-05-16 16:12:18 · 953 阅读 · 0 评论 -
UNIX再学习 -- 线程控制
留楼以后有时间再讲。感慨一下,线程部分有点懵逼。线程同步除了互斥量,好像其他的都不熟悉,没怎么用过。搞的我没有心情看一下去了。跳过去,抓紧看更重要的东西吧。原创 2017-05-16 15:22:57 · 833 阅读 · 0 评论 -
UNIX再学习 -- 进程关系
APUE 第 10 章信号讲完,回过头来看一下第 9 章的进程关系。终端登录和网络登录部分,我们只讲 Linux 系统的。一、终端登录我记得我们讲 root 登录设置时有提到,参看:C语言再学习 -- Ubuntu 12.04 root用户登录设置其中,使用Ctrl+Alt+F1 进入纯命令模式,重新依据上面的设置,重启 OK!Ctrl+Alt切换到WindowsCtrl+Alt+F7 退出纯命令原创 2017-05-09 14:31:31 · 1441 阅读 · 0 评论 -
UNIX再学习 -- 函数 select、poll、epoll
这部分是相当重要的一部分,之前在工作项目中有用到过。特意认真的看过一部分。文章最后会把我项目用到部分的源码贴出。再有值得纪念的一下,原创文章数终于赶上转载文章数了。说明我找到的学习方法是对了,一开始茫然不知所措时,学习方法加法,将看到的好的文章转载;但到了一定阶段,要懂得做减法了,将之前转载部分系统的分类总结;最后就是举一反三,将难题,转化成自己熟悉的问题解决。而我现在在做的就是一边做加法,一遍做原创 2017-05-17 17:39:19 · 7277 阅读 · 4 评论 -
UNIX再学习 -- 网络与网络协议
一、网络协议模型1、ISO/OSI 网络协议模型什么是计算机网路?计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。什么是网络协议?网络协议是一种特殊的软件,是计算机网络实现其功能的最基本的机制。网络协议的本质就是规则,即各种硬件和软件必须遵循的共同守则。网络协议原创 2017-06-14 16:26:20 · 1267 阅读 · 0 评论 -
UNIX再学习 -- RS485 串口编程
这部分本该放到 linux 下才讲的,但是讲到 select 就不得不提到了串口通信。参看:UNIX再学习 -- 函数 select、poll、epoll 那也简单了直接将之前的写好的文章,加以总结吧。最近被安排实现 linux rs485 串口通信。期间遇到各种问题,现在加以分析总结。一、硬件相关 1.1 单工、半双工、全双工首先,我使用的是芯片为 SP3485E 为半双工通信。那么先要明确什么原创 2017-05-25 16:44:34 · 18324 阅读 · 14 评论 -
UNIX再学习 -- 进程间通信之管道
一、进程间通信概念首先,需要了解一下什么是进程间通信。进程之间的相互通信的技术,称为进程间通信(InterProcess Communication,IPC)。下图列出 4 种实现所支持的不同形式的 IPC。之前进程间交换信息的方法只能是由 fork 或 exec 传送文件。进程间通信 (IPC)方式有:(1)管道(2)消息队列(3)信号量(4)共享存储(5)套接字其中消息队列、信号量、共享存储统原创 2017-06-01 17:03:06 · 2490 阅读 · 0 评论 -
UNIX再学习 -- XSI IPC通信方式
有 3 种称作 XSI IPC 的IPC:消息队列、信号量以及共享存储器。我们先来介绍它们相类似的特征:一、相似特征1、标识符和键每个内核中的 IPC 结构(消息队列、信号量和共享存储器)都用一个非负整数的标识符加以引用。标识符是 IPC 对象的内部名。为使多个合作进程能够在同一 IPC 对象上汇聚,需要提供一个外部命名方案。为此,每个 IPC 对象都与一个键相关联。无论何时创建 IPC 结构(通原创 2017-06-03 16:26:04 · 1415 阅读 · 0 评论 -
UNIX再学习 -- 网络IPC:套接字
一、基本概念1、编程接口什么是伯克利套接字(Berkeley Socket)?美国加利福尼亚大学比克利分校于 1983年发布 4.2 BSD Unix 系统。其中包含一套用 C 语言编写的应用程序开发库。该库既可用于在同一台计算机上实现进程间通信,也可用于在不同计算机上实现网络通信。当时的 Unix 还受 AT&T 的专利保护,因此直到 1989 年,伯克利大学才能自由发布他们的操作系统和网络库,原创 2017-06-13 14:36:06 · 2370 阅读 · 0 评论 -
UNIX再学习 -- TCP/UDP 客户机/服务器
一、TCP 客户机/服务器1、TCP 协议的基本特征TCP 提供客户机与服务器的连接一个完整 TCP 通信过程需要依次经历三个阶段首先,客户机必须建立与服务器的连接,所谓虚电路。然后,凭借已建立好的连接,通信双方相互交换数据。最后,客户机与服务器双双终止连接,结束通信过程。TCP 保证数据传输的可靠性TCP 的协议栈底层在向另一端发送数据时,会要求对方在一个给定的时间窗口内返回确认。如果超过了这个原创 2017-06-14 17:32:38 · 2062 阅读 · 0 评论 -
UNIX再学习 -- 高级 I/O
暂时未讲部分 阻塞/非阻塞 I/O、异步/同步 I/O、函数 readv 和 writev、函数 readn 和 writen、存储映射 I/O。重点是理解 阻塞/非阻塞 I/O,这部分等到讲完 socket 回过头再讲。下面开始进程间通信!!!原创 2017-06-01 15:10:50 · 813 阅读 · 0 评论 -
UNIX再学习 -- 环境变量
之前讲gcc编译的时候,参看:C语言再学习 -- GCC编译过程 提到过静态库和共享库,那时只是简单的讲了下它们相关的编译链接,接下来就该详细介绍它们了。不过再讲解之前还需了解一下编程相关的环境变量。一、环境变量参看:百度百科--环境变量环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量时在操作系统中一个具有特定名字的对象,它包含了一个或原创 2017-03-15 11:29:16 · 6261 阅读 · 2 评论 -
UNIX再学习 -- 线程同步
1、为什么要线程同步当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图。如果每个线程使用的变量都是其他线程不会读取和修改的,那么就不存在一致性问题。同样,如果变量时只读的,每个线程同时读取该变量也不会有一致性问题。但是,当一个线程可以修改的变量,其他线程也可以读取或者修改的时候,我们就需要对这些线程进行同步,确保它们在访问变量的存储内容时不会访问到无效的值。原创 2017-05-12 10:37:50 · 1599 阅读 · 0 评论 -
UNIX再学习 -- 函数 fork 和 vfork
一、进程标识每个进程都有一个非负整型的唯一进程 ID,即上面指令显示的的 PID。因为进程 ID 标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。虽然是唯一的,但是进程 ID 是可复用的。当一个进程终止后,其进程 ID 就称为复用的候选者。1、系统中有一些专用进程,但具体细节随实现而不同。(1)进程 ID 为 0 的进程通常是调度进程,常常被称为交换进程(swapper)。该进程是原创 2017-04-18 15:44:46 · 1181 阅读 · 0 评论 -
UNIX再学习 -- ps、top、kill 指令
一、进程标识每个进程都有一个非负整型的唯一进程 ID。因为进程 ID 标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。虽然是唯一的,但是进程 ID 是可复用的。当一个进程终止后,其进程 ID 就称为复用的候选者。1、ps 指令其中,ps指令是我们使用最多的指令了。下面来详细介绍下它。参看:ps 指令(1)ps 功能ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删原创 2017-04-18 11:04:15 · 3262 阅读 · 0 评论 -
UNIX再学习 -- 系统数据文件和信息
UNIX 系统的正常运作需要使用大量与系统有关的数据文件,例如,口令文件 /etc/passwd 和组文件 /ect/group 就是经常被多个程序频繁使用的两个文件。用户每次登陆 UNIX 系统,以及每次执行 ls -l 命令时都要使用口令文件。一、口令文件1、口令文件简介UNIX 系统口令文件包含的字段,而这些字段包含在 /usr/include/pwd.h 中的定义的 passwd 结构中。原创 2017-04-07 14:58:15 · 868 阅读 · 0 评论 -
UNIX再学习 -- 再识
到了Unix编程,因为之前有C语言的基础吧,看了下目录大部分内容之前都有所总结,进度应该能够加快。不过最近有点小郁闷,申请博客专家转正失败了,这也让我重新审视了自己更新博客的初心是什么。绝不是为了与自己水平不符的专家称号,而是为提升自己。我可以问心无愧的说每天都在进步,这已经是对于自己的肯定了。发完牢骚了,现在就开始Unix新篇!原创 2017-03-14 11:33:14 · 1285 阅读 · 0 评论 -
UNIX再学习 -- 文件I/O
上一篇讲完文件描述符,接下来进入正题,文件的处理函数。一、open 函数详细内容,可自行 man creat 查看#include #include #include int open(const char *pathname, int flags); int open(const char *pathname, int flags,原创 2017-03-27 16:44:42 · 1744 阅读 · 0 评论 -
UNIX再学习 -- shell编程
UNIX环境高级编程看了三章,遇到不少重定向等shell命令。本想到Linux时再讲,看来有必要提前了。之前有看过一本《嵌入式Linux软硬件开发详解》这本书里有简单介绍了一部分shell常用命令,就结合它来简单介绍下shell编程。毕竟没有详细看过shell相关的书籍,等以后看过了再详细讲吧。一、bash shell在UNIX基础知识这章中,有简单介绍shell:shell 是一个命令行解释器,原创 2017-03-21 14:45:50 · 7245 阅读 · 0 评论 -
UNIX再学习 -- 标准I/O
这部分之前有所总结:参看:C语言再学习 -- 文件参看:C语言再学习 -- 输入/输出原创 2017-04-05 17:06:04 · 1128 阅读 · 0 评论 -
UNIX再学习 -- 文件描述符
在 UNIX/Linux 系统中,一切皆文件,这句话想必都有听过。对于文件的操作几乎适用于所有的设备,这也就看出了文件操作的重要性了。在C语言再学习部分有讲过标准I/O文件操作,参看:C语言再学习 -- 文件 下面我们来讲解下系统文件I/O的。原创 2017-03-23 10:07:17 · 10339 阅读 · 2 评论 -
UNIX再学习 -- 错误和警告
错误和警告是常会出现的现象,了解它对以后解决问题会很有帮助。下面我们就重点来详细介绍它们。一、错误原创 2017-03-20 11:02:54 · 3691 阅读 · 0 评论 -
UNIX再学习 -- 进程环境
一、进程的概念首先需要了解下,什么是进程。Linux 下的进程,可能我们比较陌生,但是我们一直在玩 Windows 系统。应用程序文件、任务管理器,这些东西应该是很溜的。比如:通过上面两张图片我们可以得知:程序,是被存储在磁盘上,包含机器指令和数据的文件。进程,是被装载到内存中,被处理器操作的代码和数据。一个程序可被同时运行多个进程。进程在操作系统中执行特定的任务。更详细一点,参看:百度百科 --原创 2017-04-10 17:07:30 · 1359 阅读 · 0 评论 -
UNIX再学习 -- 死磕内存管理
malloc/free简化实现;malloc 和 sbrk 关系;虚拟内存机制。 一个内存管理 C 语言部分讲,UNIX部分讲,Linux部分还讲,死磕到底!!一、mallc/free简化实现上篇文章已经讲解了动态内存分配/释放函数,参看:UNIX再学习 – 内存管理 下面来讲一下,它的自定义函数实现,其中有三个部分:1、内存控制块内存控制块用于管理每次分配的内存块,记录该内存块的字节大小、忙闲状原创 2017-04-17 17:20:02 · 3769 阅读 · 6 评论 -
UNIX再学习 -- 发送信号
一、发送信号的方式发送信号的方式有几种:1、由键盘触发的信号(只能发送一些比较特殊的信号)SIGINT (2):ctrl+c 中断符SIGQUIT (3):ctrl+\ 退出符SIGTSTP (20):ctrl+z 停止符2、由错误和异常引发的信号SIGILL (4) 进程试图执行非法指令SIGBUS (7) 硬件或对齐错误SIGFPE (8) 算术异常SIGSEGV (1原创 2017-05-04 09:31:26 · 931 阅读 · 0 评论 -
UNIX再学习 -- 可重入函数和 SIGCHLD 语义
一、可重入函数参与信号处理的函数必须是可重入函数。1、何为重入?假设进程的住控制流程此刻正在调用 foo 函数,就在 foo 函数刚执行到一半的时候,内核向进程递送了信号 a;假设进程对信号 a 做了捕获,那么此时流程将转入信号 a 的处理函数 siga,而 siga 函数在执行过程中也调用了 foo 函数。于是 foo 函数中的代码又被执行,刚执行到一半,内核又递送给了信号 b。假设进程对信号原创 2017-05-03 15:59:36 · 768 阅读 · 0 评论 -
UNIX再学习 -- 信号
终于讲到信号部分,很多比较重要的应用程序都需处理信号。第 9 章需要先了解信号机制再看,所以先跳过不讲。现在开始详解信号。一、信号概念信号是提供异步事件处理机制的软件中断。这些异步事件可能来自硬件设备,如用户同时按下 Ctrl+ C 键,也可能来自系统内核,如试图访问尚未映射的虚拟内存,又或者来自用户进程,如尝试计算整数除 0 的表达式。进程之间可以相互发送信号,这使信号称为一种进程间通信的基本手原创 2017-05-02 12:05:59 · 1320 阅读 · 0 评论 -
UNIX再学习 -- 用户 ID 和组 ID
用户 ID和组 ID 的内容已经在好几章中出现过了。之前都没有讲到,现在放到一起总结。一、用户 ID 和 组 ID 回顾1、我们在APUE 第 4、6、8 章,都有涉及到。其中我们常用到的地方:(1)修改文件权限参看:UNIX再学习 -- 文件和目录chgrp命令 功能:改变文件或目录的属组。chown 命令 功能:更改某个文件或目录的属主和属组。# ls -l总用量 16-rwxr-xr-x原创 2017-04-27 14:53:39 · 1940 阅读 · 0 评论 -
UNIX再学习 -- 内存管理
C 语言部分,就一再的讲内存管理,参看:C语言再学习 -- 再论内存管理 UNIX、Linux 部分还是要讲,足见其重要。原创 2017-04-11 17:15:04 · 3551 阅读 · 0 评论 -
UNIX再学习 -- 文件和目录
文件I/O部分断断续续写了四天,最后总结发现还有好多内容是略过没讲的,我的内心是崩溃的。UNIX环境高级编程这本书,虽然我只看了四章我就发现了书里面的内容讲的太跳,如果是刚接触UNIX或者没有一点C语言基础的会很难上手。这就造成了,前面讲的会漏掉很多内容。一、函数 stat、fstat、fstatat 和 lstat详细内容可 man fstat/fstatat 查看#include #incl原创 2017-03-30 11:15:05 · 2291 阅读 · 0 评论 -
UNIX再学习 -- 静态库与共享库
一、库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于Windows和linux本质不同,因此二者库的二进制是不兼容的。库有两种:静态库(.a、.lib)和共享库也称动态库(.so、.dll)。回顾下,我们之前讲gcc编译过程可分为四个阶段:预处理->>编译->>汇编->>链接。而所谓的静态、动态是指的链接阶段。二、静态库1、静态库介绍原创 2017-03-16 14:53:49 · 2956 阅读 · 0 评论