![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
APUE
文章平均质量分 57
L7256
这个作者很懒,什么都没留下…
展开
-
APUE---system函数的简单实现
【代码】APUE---system函数的简单实现。原创 2022-09-30 20:37:30 · 227 阅读 · 0 评论 -
APUE---chap10信号---10.4~10.10(kill/pause/alrm/time/signal)
10.2 信号的概念信号是软中断 同步:按照顺序处理事情,单线程思想。同步的例子:比如去餐厅吃饭,来一个客人,点一个菜,厨师做好了,在让下一个个人点菜。优缺点“速度慢,但不会出现错误。异步:事情依次分配给不同线程,多线程同时处理。不论是否处理完,仍然接收其他的任务。异步的实际例子:比如去餐厅吃饭,来一个客人,点一个菜,下一个客人来了,继续点菜。不管厨师做好没有,这样可提高效率,让厨师一直在做菜。异步事件的处理:1.查询法:事件发生频率高2.通知法:事件发生事件频率低。并发:.原创 2022-03-06 21:23:22 · 296 阅读 · 0 评论 -
APUE---chap13守护进程
13.1 引言守护进程没有控制终端,所以说是后台运行的。13.2 守护进程的特征ps -axj-a 显示由其他用户所拥有的进程状态-x 显示没有控制终端的进程状态-j 显示与作业有关的信息kthreadd表现为其他内核进程的父进程。zion6135@zion6135-VirtualBox:~$ ps -axj | grep -Ei "kthread" 0 2 0 0 ? -1 S 0原创 2022-02-22 20:53:36 · 390 阅读 · 0 评论 -
APUE---chap10信号---10.1~10.3
10.2 信号概念:在头文件<signal.h>里面有系统定义好的一些信号类型,比如下面这些:当系统发出某个信号后,正在运行的程序收到此信号的响应动作有三种:(1)忽略信号(2)捕捉信号,执行用户设定的函数(3)执行系统的默认操作注:信号的具体含义及默认操作等,可看书具体理解,平时用掌握常见的操作即可。10.3 函数 signal在终端输入:man signal#include <signal.h>typedef void (*s..原创 2022-02-04 15:15:47 · 297 阅读 · 0 评论 -
APUE---chap9进程关系---9.4 9.5 9.10(getpgrp/setpgid/setsid/)
9.4 进程组每一个进程除了有一个进程ID之外,还属于一个进程组。可通过下面的函数获取调用进程的进程组ID进程调用setgpid()加入一个现有的进程组或者创建一个新进程组。。。9.5 会话会话是一个或者多个进程组的集合。比如下图:一个会话有三个进程组创建一个新的会话创建一个新的会话,会发生如下三件事情:(1)该进程变为新会话的会话首进程(session leader),此时,该进程是新会话的唯一进程(2) 该进程成为一个新进程组的组长进程,新的进程.原创 2022-02-21 20:25:47 · 184 阅读 · 0 评论 -
APUE---chap8(进程控制)---8.11(setuid/getuid)
8.11 更改用户ID和更改组IDsetuid()可以设置 实际用户ID(user)和 有效用户ID(effective)和 保存的用户ID(save)是的原创 2022-02-21 09:24:55 · 235 阅读 · 0 评论 -
APUE---chap8(进程控制)---8.2~8.10(getpid/fork/wait/waitpid/exec)
8.2 进程标识每一个进程都有一个非负的唯一进程ID,且这个ID是可以复用的。系统中有专有的进程:ID为0:调度进程,也称交换进程,也叫系统进程 ID为1:init进程,通常位于/sbin目录下. init通常读取与系统的初始化文件(/etc/rc*或etc/inittab文件,及在/etc/init.d中的文件),并引导系统到一个状态. init进程绝不会终止,它是一个普通用户进程,但以超级用户特权运行..各种ID可通过下面的接口读取8.3函数forkpid_t..原创 2022-02-17 21:14:48 · 783 阅读 · 0 评论 -
APUE---chap8进程控制---8.5 僵尸进程
一. fork()函数及僵尸进程僵尸进程有啥坏处?占用进程号,如果进程号都被占用完了,系统将不能创建新的进程。另外也会占用系统资源。如何产生僵尸进程?即:主进程调用fork()---->子进程结束--->主进程未调用wait/waitpid来得到子进程的退出信息--->子进程就会沦为僵尸进程。比如下面的例子#include <stdio.h>#include <stdlib.h>#include <sys/types.h>.原创 2022-01-11 17:28:47 · 100 阅读 · 0 评论 -
APUE---chap7进程环境---7.3~7.11(exit/atexit/getenv/setjmp/getrlimit)
7.3进程终止exit会先执行一些清理操作,然后进入内核。而_exit和_Exit会立刻进入内核退出函数exit()exit函数总是执行一个标准的I/O库的清理关闭动作,对所有打开的流调用fclose函数。退出函数带有的整形参数,称为终止状态。当main函数执行到最后一条语句时返回,那么终止状态为0,main函数返回一个整形值(return 0;)与调用exit(0);是等价的。main函数中的retrun0; 其实返回的对象是main对应的程序的父进程。也就是内核调用的e...原创 2022-02-15 15:45:53 · 325 阅读 · 0 评论 -
APUE---chap6系统数据文件和信息---6.2~6.4 6.10
6.2 口令文件 /etc/passwd/etc/passwd是一个文件,包含的信息:可通过 cat /etc/passwd查看,不同的操作系统会有不同,大致可按照下面图片的信息列表去解释数据每个信息之间通过 :隔开 , 比如解释第一行的内容root // 用户名 x //加密口令字段(如果为空,代表不加密) 0 // 用户ID (0代表超级用户) 0 // 组ID root //注释字段 /root //初始工作目录 /bin/bash // 可执行程序名获...原创 2022-02-12 16:32:16 · 494 阅读 · 0 评论 -
APUE---chap5标准I/O---5.13临时文件(tmpnam/tmpfile)
当代码执行过程中需要临时文件,再程序结束时自动销毁,便有如下的函数tmpfile() --->创建一个匿名文件: ls 也看不到--->如果程序正常终止,会自动删除此文件原创 2022-02-06 16:06:40 · 142 阅读 · 0 评论 -
APUE---chap5标准I/O---5.10定位流(fseek/ftell)
操作文件位置指针fseek和ftell都嘉定文件的位置可以放在一个long变量中,说白了可通过指针操作一个文件。但因为不同平台上的long代表的数据长度不同,所以为了解决这个问题,引入了fseeko和ftello这两个函数。函数定义:Demo:通过fseek和ftell得到文件长度#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv) { FILE *fp; .原创 2022-02-06 15:44:12 · 174 阅读 · 0 评论 -
APUE---chap5标准I/O---5.6 5.7 5.9(fgetc/fputc/fgtes/fputs/fwrite/fread)
5.6 每次读写一个字符的I/O函数声明int fgetc(FILE *stream); // man fgetcint fputc(int c, FILE *stream); // cast int c to char and write to stream简单的Demo使用fgetc和fputc#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string原创 2022-02-06 15:27:17 · 190 阅读 · 0 评论 -
APUE---chap5标准I/O---5.5打开流(fopen/fclose)
1.fopen:1.1基本定义man fopen // open a streamFILE *fopen(const char *pathname, const char *mode);pathname :将要打开的文件名mode: 文件打开的权限,有以下6种r read only r+ read and write w 有则清空,无则创建 w+ a 写到文件末尾处 a+ re...原创 2022-02-05 18:03:01 · 192 阅读 · 0 评论 -
APUE---chap5标准I/O---5.4缓冲(fflush/setvbuf)
缓冲意义及类型标准I/O库提供缓冲存在的目的是为了减少使用read和write的调用次数。缓冲有以下三种类型:(1)全缓冲:流满了再刷新,是强制的。(2)无缓冲:比如stderr,流被填充了内容立刻输出(3)行缓冲:这个流收到了换行符就会输出并刷新流,比如printf(输出到stdout)fflush函数注释了下面的fflush函数,那么程序将不会打印任何内容,因为printf指向的流是行缓冲,没收到换行符,时不可以输出的int main(int argc, char原创 2022-02-06 15:58:28 · 311 阅读 · 0 评论 -
APUE---chap4文件和目录---4.21~4.23(opendir/mkdir/rmdir/chdir/getcwd/global/)
4.22 读目录打开文件夹opendir读取目录readdir#include <dirent.h>struct dirent *readdir(DIR *dirp); //返回值:成功返回指针;出错或达到目录尾,返回NULL遍历目录下所有文件。并打印相关信息#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <dirent...原创 2022-02-11 20:52:03 · 457 阅读 · 0 评论 -
APUE---chap4文件和目录---4.2~4.18(stat/access/umask/chmod/remove/rename)
4.2 函数stat获取文件状态state命令通过函数stat()封装而成,它可以得到包含struct stat结构体的所有属性内容。具体可查看stat()函数参数struct stat通过stat函数获取文件大小的Demo#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <unistd.h>s原创 2022-02-10 20:54:47 · 486 阅读 · 0 评论 -
APUE---chap3文件I/O---3.12~3.16(dup/dup2/sync/fsync/fcntl//ioctl)
函数定义:锁定原创 2022-02-07 16:48:19 · 430 阅读 · 0 评论 -
APUE---chap3文件I/O---3.11原子操作
一. 多线程带来的文件读写问题考虑下面这种情况,单进程去读写文件没有什么问题#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#include <unistd.h>#include "stdio.h"int main() { int fd = open("Person.cpp", O_RDWR); if (lseek(fd, 0L, 2) < 0原创 2022-01-25 11:54:21 · 477 阅读 · 0 评论 -
APUE---chap3文件I/O---3.9~3.10
3.9 io效率问题查看程序执行时间:终端输入:time ./a.outreal(总时间) = user(用户时间) + sys(系统调用)程序性能测试:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define BUFFSIZE 4096int main(void) { int n; char buf[BUFFSIZE]; while ...原创 2022-02-07 10:22:07 · 591 阅读 · 0 评论 -
APUE---chap3文件I/O---3.2~3.8(open/close/read/write/lseek)
3.2文件描述符文件描述符一般用fd(file descriptor)表示,是一个非负整数。1 一般是从3开始的,因为一个程序运行,会默认自动的打开3个fd,分别是0(stdin) 1(stdout)以及 2 (stderr)2文件描述符的范围是0~OPEN_MAX-1,而因为程序默认打开3个流,所以可打开的流个数为OPEN_MAX - 3 , 可通过命令 ulimits -a 的open files查看3.这个int fd 代表的是数组下标, 这个数组是程序打开的所有stream的记录...原创 2022-02-06 21:49:48 · 160 阅读 · 0 评论 -
APUE---chap1 UNIX基础知识---1.11系统调用和库函数
1.11 系统调用和库函数操作系统提供多种服务的入口点,由程序向内核请求服务,这些入口点被称做系统调用。以用户程序调用malloc为例子,UNIX系统调用中,处理分配存储空间的时sbrk函数,它仅仅完成增加或减少进程地址空间的动作。而如何管理一个程序所拥有的内存空间取决于用户程序,与系统调用sbrk()无关。就比如一台打印机,sbrk()执行打印文件的动作,然而如果同时两个人(两个线程)同时发出了打印命令(malloc),这个先后顺序及内存分配就需要malloc来决定了。所以库函数和.原创 2022-02-04 15:44:55 · 401 阅读 · 0 评论 -
APUE---chap1 UNIX基础知识---1.7出错处理(fprintf/perror/strerror)
0.errnoerrno是一个程序运行期间的全局变量,当程序因为某种异常退出,这个全局宏变量errno将会被赋值,可以通过printf之类的打印出来。2比如errno打印结果为printf("fopen eroor %d\n", errno); //fopen eroor 2, 那么需要去查找这个数字代表的具体含义,需要在打开/usr/include/asm-generic/errno-base.h查看,可以看到:#define ENOENT 2 /* No such file or dire..原创 2022-02-06 14:33:55 · 982 阅读 · 0 评论