APUE
文章平均质量分 93
####
冷眼观world
社畜
展开
-
标准I/O
fopen函数函数原型FILE *fopen(const char *pathname, const char *mode);第一个参数是文件路径名,第二个参数是打开方式,返回一个文件指针打开方式r Open text file for reading. The stream is positioned at the beginning of thefile.r+ Open for reading and writing. The stream is position原创 2021-11-01 00:05:46 · 129 阅读 · 0 评论 -
系统调用I/O(文件I/O)
大纲文件描述符IO操作open close返回值read write返回值使用样例lseek系统IO和标准IO的区别文件共享原子操作程序的重定向:dup dup2使用样例同步:sync fsync fdatasync其他fcntl ioctl/dev/fd/文件描述符通过open函数打开一个文件,可以得到一个存储该文件所有属性的结构体(类似于标准io的FILE),但是又不完全像标准io,系统io的open会将这个结构体的指针存放到一个数组中,然后返回这个指针在数组中的下标,而是一个int值(不像fop原创 2021-10-31 23:56:19 · 339 阅读 · 0 评论 -
文件和目录
大纲文件系统目录和文件获取文件属性stat函数返回值文件访问权限umask文件权限更改:chmod、fchmod粘着位(t位)文件系统:FAT、UFS硬链接和符号链接utime目录的创建和销毁更改当前工作路径分析目录/读取目录内容系统数据文件和信息进程环境文件系统目录和文件获取文件属性stat函数int stat(const char *pathname, struct stat *statbuf); //通过文件名int fstat(int fd, struct stat *statbuf);原创 2021-11-02 23:54:28 · 226 阅读 · 0 评论 -
系统数据文件和信息
大纲口令文件getpwuid、getpwname组文件getgrgid、getgrgrnam阴影口令getspnam时间timegmtime、localtimemktimestrftime口令文件linux中passwd结构包含10个字段中的7个,每个字段用:分隔用户名:加密口令:用户ID:组ID:注释字段:初始工作目录:初始shellyzq:x:1000:1000:,,,:/home/yzq:/bin/bash按照上面的字段顺序,出现passwd结构体struct passwd { ch原创 2021-11-04 02:16:53 · 245 阅读 · 0 评论 -
进程的环境
大纲进程的终止正常终止异常终止命令行参数getopt、getopt_long返回值使用样例环境变量getenv、setenv、putenvC程序的存储空间布局库函数跳转资源的获取及控制进程的终止正常终止从main函数返回调用exit函数用传入的值和0377(意味着只保留低8位,范围-128-127)相与,然后返回结果给父进程。调用exit导致进程正常终止,使用atexit()或on_exit()注册的函数将会以逆序顺序调用调用_exit或_Exit_开头的是系统调用,被exit调用使用。普原创 2021-11-06 20:54:58 · 173 阅读 · 0 评论 -
进程的控制
大纲*进程标识符pidgetpidgetppid*进程的产生fork使用样例样例1样例2vfork*进程的消亡及资源释放waitwaitpid进程分配分块法交叉分配进程池*exec函数族使用样例样例1样例2用户权限及组权限函数族使用样例system进程会计进程时间守护进程系统日志*进程标识符pid类型是pid_t,一般是有符号的16位整型数。进程号是顺次向下被取得使用的,和进程标识符优先取最小的使用不一样。getpid返回当前进程的pidpid_t getpid(void);getppid返原创 2021-11-11 21:33:59 · 819 阅读 · 0 评论 -
并发之信号
大纲信号的概念signal信号的不可靠可重入函数信号的响应过程没收到信号收到信号SIG_IGN原理标准信号为什么会丢失信号常用函数killraisealarmpause结合alarm和pause实现类似漏桶的程序abortsystemsleep信号集信号屏蔽字和pending集处理扩展sigsuspendsigactionsetitimer实时信号同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作原创 2021-11-16 20:20:34 · 493 阅读 · 0 评论 -
并发之线程
大纲线程概念线程创建使用样例线程终止使用样例栈清理线程取消线程同步线程属性线程同步的属性重入线程和信号线程和fork线程概念线程就像是一个正在运行的函数,多线程就是一个正在运行的程序中有多个函数正在同时运行。有点像main函数现在用的比较多的是posix线程,这里的posix指的是一套标准,而不是实现。还有另一套标准叫openmp。有个线程标识:pthread_t,p表示是posix下的,thread表示线程。这个类型并不确定,可能是个整型,也可能是结构体、共用体。因为类型不确定,所以一般不同标准原创 2021-11-21 21:35:45 · 414 阅读 · 0 评论 -
并发之线程控制
线程属性int pthread_attr_init(pthread_attr_t *attr);int pthread_attr_destroy(pthread_attr_t *attr);原创 2021-11-23 15:29:41 · 407 阅读 · 0 评论 -
高级I/O
非阻塞I/O阻塞I/O就是发出IO请求后内核会查看数据是否就绪,如果没就会等待数据就绪,此时线程就处于阻塞状态。而非阻塞IO是发出请求后并不需要等待,而是马上得到一个结果。我们之前用的都是阻塞I/O,但是在某些实现上用阻塞I/O不太妥当。举例如下:假设设备A和设备B要进行数据交换这里只是由一个线程或进程来完成。如果A没有数据,刚开始就阻塞,后面的谁都动不了可以分成两个任务来做:这里由两个线程或者进程实现,一个负责读A写B,一个负责读B写A。上面两个做法,第一个如果用阻塞IO实现可以直接宣告死亡,原创 2021-11-26 19:39:13 · 288 阅读 · 0 评论 -
进程间通信
大纲管道匿名管道使用样例命名管道XSI IPC消息队列message queuemsggetmsgsndmsgrcvmsgctl使用样例信号量semgetsemopsemctl每个进程有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间中拷贝到缓冲区,进程2再从缓冲区把数据读走。内核提供的这种机制就是进程间通信。通信需要媒介,两个进程间通信的媒介就是内存。通信的原理就是让两个或多个进程能够看到同一块共同的原创 2021-11-30 18:04:56 · 406 阅读 · 0 评论