
Unix/Linux
unix、linux学习
wy471x
自信,勇敢,有担当!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux下df命令简单实现
过程总结在项目文件下查找关于Android设备上显示内存使用情况的源代码(比如:~\src\com\android\settings)将源代码导入Source Insight中进行查看,找到内存显示的代码片段分析如何进行内存容量的计算将其Android代码翻译为C代码即可相关代码命令实现代码// showstorage.c#include <stdio.h>#include <stdlib.h>#include <mntent.h>原创 2020-05-26 22:13:11 · 1268 阅读 · 0 评论 -
缓冲IO之使用注意事项
本文来自个人博客:https://dunkwan.cn文章目录Flushing a Stream(冲洗流)Obtainning the Associated File Descriptor(获取关联的文件描述符)Flushing a Stream(冲洗流)标准I/O库提供了一个接口,可以将用户缓冲区写入内核,并且保证写到流中的所有数据都通过write调用被刷新。fflush函数提供了这个...原创 2020-03-16 15:52:21 · 228 阅读 · 0 评论 -
网络IPC
本文来自个人博客:https://dunkwan.cn文章目录字节序`socket`函数`connect`函数`bind`函数`listen`函数发送数据函数接收数据函数字节序 同一台主机上进程间通信是不需要考虑字节序问题的,但是在网络上的不同主机上进程进行通信时,则要考虑字节序问题。 字节序是一个处理器架构特性,用于指示像整数这样的大数据类型内部的字节如何排序。当处理器架构支持...原创 2020-03-11 00:59:07 · 338 阅读 · 0 评论 -
进程间通信之XSI IPC和POSIX信号量
本文来自个人博客:https://dunkwan.cn文章目录XSI IPC标识符和键权限结构消息队列信号量共享存储POSIX 信号量XSI IPC有三种称作XSI IPC的IPC:消息队列、信号量以及共享存储。它们之间有很多的相似之处。这些相似之处便是接下来将要介绍的内容。标识符和键每个内核中的IPC结构(消息队列、信号量或存储段)都用一个非负整数的标识符加以引用。例如,要想一个消...原创 2020-03-09 22:00:03 · 975 阅读 · 0 评论 -
进程间通信之管道、函数popen和pclose、协同进程以及FIFO
本文来自个人博客:https://dunkwan.cn文章目录管道函数`popen`和`pclose`协同进程管道管道是UNIX系统IPC的最古老形式,所有UNIX系统都支持该通信机制。管道有以下两种局限性。历史上,它们是半双工的(即数据只能在一个方向上流动)。管道只能在具有公共祖先的两个进程间使用。管道需要通过pipe函数来进行创建。#include <unistd...原创 2020-03-05 22:37:46 · 359 阅读 · 0 评论 -
高级I/O之函数readv和writev以及存储映射I/O
本文来自个人博客:https:dunkwan.cn文章目录函数readv和writev函数`readn`和`writen`存储映射I/O函数readv和writevreadv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读和聚集写。#include <sys/uio.h>ssize_t readv(int fd, const st...原创 2020-03-05 15:19:27 · 677 阅读 · 0 评论 -
高级I/O之异步I/O
本文来自个人博客:https:dunkwan.cn文章目录异步I/OPOSIX异步I/O异步I/OPOSIX异步I/O异步I/O接口使用AIO控制块来描述I/O操作。aiocb结构定义了AIO控制块。该结构至少包括如下这些字段(视具体实现还可能有额外的字段):struct aiocb{ int aio_fildes; /* file descriptor */ off...原创 2020-03-05 00:26:39 · 244 阅读 · 0 评论 -
高级I/O之I/O多路转接
本文来自个人博客:https://dunkwan.cn文章目录I/O多路转接函数`select`和`pselect`函数`poll`I/O多路转接函数select和pselect在所有POSIX兼容的平台上,select函数时我们可以执行I/O多路转接。传给select的参数告诉内核:我们关心的描述符对于每个描述符我们所关心的条件愿意等待多长时间从select返回时,内核告...原创 2020-03-04 00:34:46 · 254 阅读 · 0 评论 -
高级I/O之非阻塞I/O和记录锁
本文来自个人博客:https://dunkwan.cn文章目录非阻塞I/O记录锁`fcntl`记录锁锁的隐含继承和释放建议性锁和强制性锁非阻塞I/O系统调用被分成两类:“低速”系统调用和其他。低速系统调用是可能会使进程永远阻塞的一类系统调用,包括:如果某些文件类型的数据并不存在,读操作可能会使调用者永远阻塞。如果数据不能被相同的文件类型立即接受,写操作可能会使调用者永远阻塞。在某...原创 2020-03-03 20:43:04 · 303 阅读 · 0 评论 -
守护进程之编程规则、出错记录、单实例守护进程和守护进程的惯例
本文来自个人博客:https://dunkwan.cn编程规则在编写守护进程时,需要遵循一些基本规则。下面就说明一下这些规则。首先调用umask函数将文件模式创建屏蔽字设置为一个已知值。调用fork函数,返货是父进程exit。调用setsid创建一个新会话。将当前工作目录更改为根目录。关闭不再需要的文件描述符。某些守护进程打开/dev/null使其具有文件描述符0、1和2,这...原创 2020-03-02 00:50:36 · 326 阅读 · 0 评论 -
线程控制之重入、线程特定数据、取消选项、线程和信号、线程和fork以及线程和I/O
本文来自个人博客:https://dunkwan.cn文章目录重入线程特定数据取消选项可取消状态属性可取消类型属性线程和信号线程和`fork`线程和I/O重入如果一个函数在相同的时间点可以被多个线程安全地调用,就称该函数为线程安全的。以下是不能保证线程安全的函数。下图则是一些非线程安全函数的线程安全的替代版。一个函数时线程安全的并不代表它就是对信号处理程序是可重入的。如果函数对异...原创 2020-03-01 20:16:22 · 359 阅读 · 0 评论 -
线程控制之同步属性
本文来自个人博客:https://dunkwan.cn文章目录同步属性互斥量属性进程共享属性健壮属性类型属性函数`pthread_mutex_consistent`读写锁属性条件变量属性屏障属性同步属性就像线程具有属性一样,线程的同步对象也有属性。对于以下介绍的所有接口,若需要了解详情可通过命令man 3 + FunctionName的方式进行查询。互斥量属性互斥量属性是与pthre...原创 2020-02-29 22:39:27 · 475 阅读 · 0 评论 -
线程控制之线程限制和线程属性
本文来自个人博客:https://dunkwan.cn文章目录线程限制线程属性`detachstate`属性`stackaddr`属性`stacksize`属性`guardsize`属性线程限制Single UNIX Specification 定义了与线程操作有关的一些限制,下图是列出了这些限制。下图则给出了这些限制在4中不同平台上的限制值。”没有确定的限制“并不意味着是无限制。...原创 2020-02-29 18:19:57 · 421 阅读 · 0 评论 -
线程之线程同步
本文来自个人博客:https://dunkwan.cn文章目录线程同步互斥量函数`pthread_mutex_timedlock`读写锁带有超时的读写锁条件变量自旋锁屏障线程同步互斥量互斥量从本质上来说是一把锁,在访问共享资源前对互斥量进行设置,在访问完成后释放互斥量。互斥量使用pthread_mutex_t数据类型表示的。在使用互斥量以前,必须首先对它进行初始化,可以把它设置为常量P...原创 2020-02-29 14:01:44 · 273 阅读 · 0 评论 -
线程之线程标识、创建以及终止
本文来自个人博客:https://dunkwan.cn文章目录线程标识线程创建线程终止线程标识就像每个进程有一个进程ID一样,每个线程也都有自己的线程ID。进程ID在整个系统中是唯一的,但线程ID不同,线程ID不同,线程ID只有在它所属的进程上下文中才有意义。线程ID是由pthread_t数据类型来表示的,实现的时候可以用一个结构来代表pthread_t数据类型,所以可移植的操作系统实...原创 2020-02-28 17:15:50 · 348 阅读 · 0 评论 -
信号之函数sigqueue、作业控制信号以及信号名和编号
本文来自个人博客:https://dunkwan.cn文章目录函数`sigqueue`作业控制信号信号名和编号函数sigqueue大部分UNIX系统不对信号排队,在POSIX.1的实时扩展中,有些系统开始增加对信号排队的支持。使用排队信号必须做以下几个操作。使用sigaction函数安装信号处理程序时指定SA_SIGINFO标志。如果没有给出这个标志,信号会延迟,但信号是否进入队列...原创 2020-02-27 23:02:09 · 386 阅读 · 0 评论 -
信号之函数system、sleep、nanosleep以及clock_nanosleep
本文来自个人博客:https://dunkwan.cn文章目录函数`system`函数`sleep`、`nanosleep`和`clock_nanosleep`函数system由于system执行的命令可能是交互式的命令,因为system的调用者在程序执行时放弃了控制,等待该执行程序的结束,所以system的调用者就不应接收SIGINT和SIGQUIT这两个终端产生的信号。测试示例1:...原创 2020-02-27 21:12:13 · 1713 阅读 · 0 评论 -
信号之函数sigaction、sigsetjmp、siglongjmp、sigsuspend以及abort
本文来自个人博客:https://dunkwan.cn文章目录函数sigaction函数`sigsetjmp`和`siglongjmp`函数`sigsuspend`函数`abort`函数sigactionsigaction函数的功能是检查或修改(或检查并修改)与指定信号向关联的处理动作。此函数取代了UNIX早期版本使用的signal函数。#include <signal.h>...原创 2020-02-27 16:20:06 · 639 阅读 · 0 评论 -
信号之函数kill、raise、alarm、pause、sigprocmask、sigpending以及信号集
本文来自个人博客: https://dunkwan.cn文章目录函数`kill`和`raise`函数`alarm`和`pause`信号集函数`sigprocmask`函数`sigpending`函数kill和raisekill函数将信号发送给进程或进程组。raise函数则允许进程向自身发送信号。#include <signal.h>int kill(pid_t pid, ...原创 2020-02-26 22:50:40 · 367 阅读 · 0 评论 -
信号之中断的系统调用、可重入函数、SIGCLD语义以及可靠信号术语和语义
本文来自个人博客:https://dunkwan.cn文章目录中断的系统调用可重入函数`SIGCLD`语义可靠信号术语和语义中断的系统调用早期UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理是因为一个信号发生了,进程捕捉到它,这意味着已经发生了某种事情,所以是个好...原创 2020-02-26 17:51:35 · 459 阅读 · 0 评论 -
信号之信号概念、函数signal以及不可靠的信号
本文来自个人博客:https://dunkwan.cn文章目录信号概念函数`signal`程序启动进程创建不可靠的信号信号概念信号时软件中断,它提供了一种处理异步事件的方法。每个信号都有一个名字且都以SIG字符开头。在头文件<signal.h>中,信号名都被定义为正整数常量。不存在编号为0的信号,kill函数对信号编号为0的有特殊的应用。POSIX.1将此信号编号值称为空信号...原创 2020-02-26 00:15:36 · 440 阅读 · 0 评论 -
进程关系
文章目录进程组会话控制终端函数`tcgetpgrp`、`tcsetpgrp`和`tcgetsid`作业控制shell执行程序孤儿进程组进程组每个进程除了有一进程ID外,还属于一个进程组。函数getpgrp用于返回调用进程的进程组ID。#include <unistd.h>pid_t getpgrp(void);返回值:调用进程的进程组ID。getpgid函数用于获取指定p...原创 2020-02-25 20:27:26 · 248 阅读 · 0 评论 -
进程控制之进程会计、用户标识、进程调度和进程时间
文章目录进程会计用户标识进程调度进程时间进程会计大多数UNIX系统都提供了一个选项以进行进程会计处理。启用该选项后,每当进程结束时内核就写一个会计记录。典型的会计记录包含总量较小的二进制数据,一般包括命令名、所使用的CPU时间总量、用户ID和组ID、启动时间等。会计记录结构定义在头文件<sys/acct.h>中,每种系统的实现各不相同,但会计记录样式基本如下:typedef u...原创 2020-02-24 22:18:42 · 418 阅读 · 0 评论 -
进程控制之更改用户ID和更改组ID、解释器文件、函数system
文章目录更改用户ID和更改组ID函数`setreuid`和`setregid`函数`seteuid`和`setegid`组ID解释器文件函数`system`设置用户ID程序更改用户ID和更改组ID在UNIX系统中,特权以及访问权限控制,是基于用户ID和组ID的。如果需要程序能够访问当前并不允许的资源时,需要改变自己的用户ID和组ID。这时setuid和setgid函数便能起到这种作用。#in...原创 2020-02-24 14:05:24 · 752 阅读 · 0 评论 -
进程控制之竞争条件、函数exec
文章目录竞争条件函数`exec`竞争条件当多个进程都企图对共享数据进行某种处理,而最后的结果又取决于进程运行的顺序时,这种情况被称之为竞争条件(race condition)。如果第一个进程希望等待一个子进程终止,则它必须调用wait函数中的一个。如果一个进程要等待其父进程终止,则可以使用下列形式的循环:while(getppid() != 1) sleep(1);这种形式的循环...原创 2020-02-23 16:44:59 · 281 阅读 · 0 评论 -
进程控制之函数wait、waitpid、waitid、wait3和wait4
文章目录函数wait和waitpid函数`waitid`函数`wait3`和`wait4`函数wait和waitpid调用wait和waitpid函数进程会发生什么。如果其所有子进程都还在运行,则阻塞。如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回。如果它没有任何子进程,则立即出错返回。#include <sys/wait.h>pi...原创 2020-02-23 01:26:49 · 1664 阅读 · 0 评论 -
进程控制之进程标识、函数fork、vfork以及exit
文章目录进程标识函数`fork`函数`vfork`函数`exit`进程标识每个进程都有一个非负整型表示的唯一进程ID。ID为0的进程通常是调度进程,常常被称之为交换进程,该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称之为系统进程。进程ID为1的通常是init进程,在自举过程结束时由内核调用。该进程的程序文件在UNIX的早期版本中是/etc/init,在较新版本中是/sbin/in...原创 2020-02-21 23:55:39 · 277 阅读 · 0 评论 -
进程环境之setjmp和longjmp函数以及getrlimit和setrlimit函数
文章目录`setjmp`和`longjmp`函数1. 自动变量、寄存器变量和易失变量2. 自动变量的潜在问题`getrlimit`和`setrlimit`函数setjmp和longjmp函数在C语言中,goto语句是不能跨越函数的,而执行这种类型跳转功能的函数是setjmp和longjmp。这两个函数对于处理在很深层嵌套函数调用中的出错情况是非常有用的。为了处理非致命性错误时,我们需要检查返回...原创 2020-02-21 16:28:27 · 271 阅读 · 0 评论 -
进程环境之C程序的存储空间布局、共享库、存储空间分配以及环境变量
文章目录C程序的存储空间布局共享库存储空间分配环境变量C程序的存储空间布局历史一直沿袭至今,C程序有下列几部分组成:正文段 。这是由CPU执行的机器指令的部分。通常,正文段是可共享的,所以即使是频繁执行的程序在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其指令。初始化数据段。通常将此段称为数据段,它包含了程序中需明确地赋初值的变量。未初始化数据段。通常称...原创 2020-02-21 01:28:28 · 488 阅读 · 0 评论 -
进程环境之main函数、进程终止、命令行参数以及环境表
文章目录`main`函数进程终止1. 退出函数2. 函数`atexit`命令行参数环境表main函数C程序总是从main函数开始执行。main函数原型是:int main(int argc, char *argv[]);argc是命令行参数个数,argv是指向参数的各个指针所构成的数组。当内核执行C程序时,在调用main函数前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为...原创 2020-02-20 21:59:25 · 686 阅读 · 0 评论 -
系统数据文件和信息之其他数据文件、登录账户记录、系统标识以及时间和日期例程
文章目录其他数据文件登录账户记录系统标识时间和日期例程`time`函数返回当前时间和日期。`clock_gettime`函数用于获取执行时钟的时间。`clock_getres`函数把参数`tsp`指向的`timespec`结构初始化为与`clock_id`参数对应的时钟精度。`clock_settime`函数对特定精度的时钟设置时间。`gettimeofday`函数获取的时间精度要比`time`函...原创 2020-02-20 16:45:33 · 615 阅读 · 0 评论 -
系统数据文件和信息之口令文件、阴影口令、组文件以及附属组ID
文章目录口令文件阴影口令组文件附属组ID口令文件在<pwd.h>中定义了passwd结构体。以下就是Linux下的该结构体:struct passwd{ char *pw_name; /* username */ char *pw_passwd /*user password */ uid_t pw_uid /* user ID */ gid_t ...原创 2020-02-20 14:09:54 · 369 阅读 · 0 评论 -
标准I/O库之内存流
内存流三个用于内存流的创建,第一个是fmemopen函数。#include <stdio.h>FILE *fmemopen(void *restrict buf, size_t size, const char *restrict type);返回值:若成功,返回流指针;若错误,返回NULL。fmemopen函数允许调用者提供缓冲区用于内存流:buf参数指向缓冲区的开始...原创 2020-02-20 00:27:36 · 348 阅读 · 0 评论 -
文件和目录之函数rename和renameat
#include<stdio.h>int rename(const char *oldname, const char *newname);int renameat(int oldfd, const char *oldname, int newfd, const char *newname);两个函数的返回值:若成功, 返回 0; 若出错, 返回 -1。上面两个函数...原创 2020-02-19 21:55:08 · 794 阅读 · 0 评论 -
文件和目录之函数futimens、utimensat和utimes
一个文件的访问与修改时间可以通过以下几个函数进行修改。同时, futimens和utimensat函数可以指定纳米级精度的时间戳。#include <sys/stat.h>int futimens(int fd, const struct timespec times[2]);int utimensat(int fd, const char *path, const st...原创 2020-02-19 21:49:50 · 1679 阅读 · 0 评论 -
文件和目录之函数mkdir、mkdirat、rmdir和读目录函数
用mkdir和mkdirat函数来创建目录,用rmdir函数删除目录。#include <sys/stat.h>int mkdir(const char *pathname, mode_t mode);int mkdirat(int fd, const char *pathname, mode_t mode);两个函数返回值:若成功,返回 0;若失败,返回 -1...原创 2020-02-19 21:40:50 · 3338 阅读 · 0 评论 -
文件和目录之函数chdir、fchdir、getcwd和设备特殊文件
每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点。当用户登录到UNIX系统时,其当前工作目录通常是口令文件(/etc/passwd)中该用户登录项的第六个字段——用户的起始目录。当前工作目录的是进程的一个属性,起始目录则是登录名的一个属性。进程调用chdir或fchdir函数来更改当前工作目录。#include <unistd.h>int chdir(...原创 2020-02-19 21:35:03 · 251 阅读 · 0 评论 -
标准I/O库之流、FILE对象、三个标准流以及缓冲
对于标准I/O库而言,它们所有的操作均是围绕着流来进行的。标准I/O文件流可用于单字节或多字节字符集。流的定向决定了所读、写的字符是单字节还是多字节。只有两个函数可改变流的定向,freopen函数清除一个流的定向;fwide函数可用于设置流的定向。#include <stdio.h>#include <wchar.h>int fwide(FILE *fp, i...原创 2020-02-19 21:31:19 · 382 阅读 · 0 评论 -
标准I/O库之格式化I/O、实现细节以及临时文件
格式化I/O格式化输出#include <stdio.h>int printf(const char* restrict format, ...);int fprintf(FILE *restrict fp, const char *restrict format, ...);int dprintf(int fd, const char *restrict format, ....原创 2020-02-19 18:26:08 · 338 阅读 · 0 评论 -
标准I/O库之标准I/O效率、二进制I/O和定位流
标准I/O的效率使用getc和putc函数将标准输入复制到标准输出。#include "../../include/apue.h"int main(void){ int c; while((c=getc(stdin)) != EOF) if(putc(c,stdout) == EOF) err_sys("output error");...原创 2020-02-18 23:26:37 · 322 阅读 · 0 评论