首页 > TAG信息列表 > APUE

[apue] 文件中的空洞

空洞的概念 linux 上普通文件的大小与占用空间是两个概念,前者表示文件中数据的长度,后者表示数据占用的磁盘空间,通常后者大于前者,因为需要一些额外的空间用来记录文件的某些统计信息或附加信息、以及切分为块的数据信息 (通常不会占用太多)。文件占用空间也可以小于文件尺寸,此时文

APUE---chap3文件I/O---原子操作

一. 多线程带来的文件读写问题 考虑下面这种情况,单进程去读写文件没有什么问题 #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 (lsee

APUE第十一章笔记

第十一章 线程 11.3 线程标识 每个线程有一个线程ID。线程ID只有在它所属的进程上下文中才有意义。实现的时候可以用-一个结构来代表pthread_t数据类型。两个线程ID进行比较的函数 #include <pthread.h> int pthread_equal(pthread_t tidl, pthread_t tid2); //返回值:若相等,

(转)APUE第13章 守护进程Deameon

原文:https://www.jianshu.com/p/fbe51e1147af 守护进程 守护进程daemon是一种生存周期很长的进程。它们通常在系统引导时启动,在系统关闭时终止。守护进程是没有终端的,它们一直在后台运行。 守护进程的特征 在Linux系统中,可以通过命令 ps -efj 来查看守护进程。例如下图:  

APUE 第14章 高级I/O

I/O 分为阻塞和非阻塞,阻塞就是我要一个东西,然后得不到就在那等,非阻塞就是,我要一个东西,对方立马返回结果说没有,那我就继续做其他的事,要设置非阻塞,方法有: 1.open需要指定O_NONBLOCK 2. set_fl指定文件状态标志为O_NONBLOCK 标准输出是普通文件或者终端STDOUT,STDERR,那么结果可能

apue(《UNIX环境高级编程》)笔记

前言:最近开始读aupe这本业内评价很不错的书。看了很多人的评论,总的来说如果要学好这本书的内容读一遍是远远不够的,同时还要把书中实现的源码全部手动的过一遍。最后找一个项目,边看源码边翻书的去读,这样才能学有所成。目前我还是读一遍的程度,因此体会不到书中高深莫测的学识,

APUE Unix/Linux文件系统

1. 磁盘布局 1.1 分区 一个磁盘可分为多个分区, 每个分区须先用格式化工具(如mkfs)格式化成指定格式的文件系统, 才能用于存储文件.  磁盘文件系统布局:   1.2 块 block,  文件系统中的最小存储单位, 大小在格式化时规定 设置方式, 格式化时输入命令: $ mke2fs -b 1024 # 通

APUE习题9.2

/*Program: * APUE习题9.2 * History: * 2021/1/21 Chen Ying-jun First release * */ #include<apue.h> #include<iostream> #include<my_error.h> #include<unistd.h> using namespace std; int main(){ pid_t pid,

【APUE学习笔记】第三章 文件I/O

  大多数UNIX文件I/O只需用到5个函数:open()、read()、write()、lseek()以及close()。 1.原子操作   现代操作系统中,一般都提供了原子操作来实现一些同步操作,所谓原子操作,也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在

APUE读书笔记(四)

6 系统数据文件和信息 口令文件 UNIX系统口令文件(/etc/passwd)中的字段包含在<pwd.h>中定义的passwd结构中,每一行包含一个登录项,各字段间用冒号分隔。 口令文件中通常有用户名为root的登录项,其用户ID是0(超级用户),加密口令字段包含一个占位符(现在将其存放在另一文件中),登录项的某些字

《UNIX环境高级编程》(APUE) 笔记第十二章 - 线程控制

12 - 线程控制 GitHub 地址 1. 线程限制 下图为与 线程操作 有关的一些 限制: 可以通过 sysconf 函数进行查询 。 2. 线程属性 可使用 pthread_attr_t 结构修改线程默认属性,并把这些属性与创建的线程联系起来。 初始化 和 反初始化: #include <pthread.h> int pthread_attr_init(p

《UNIX环境高级编程》(APUE) 笔记第十章 - 信号

10 - 信号 GitHub 地址 1. 信号 信号是 软中断 ,信号提供了一种处理异步事件的方法。 当造成信号的事件发生时,为进程 产生 一个信号(或向进程 发送 一个信号)。事件 可以是硬件异常(如除以 \(0\))、软件条件(如alarm定时器超时)、终端产生的信号或调用 kill 函数。 每个信号都有一个名字

[apue] getopt 可能重排参数

看第21章时,介绍到了解析命令行的神器 getopt,了解了 linux 下处理通用命令行的方法。 命令行可分为参数与选项,其中不带 - 或 -- 前缀的为参数,对一个命令而言数量是固定的,多个参数之间的顺序也是固定的(不然命令没法区分);而选项就是带 - 或 -- 前缀的,可有可没有的,由用户的输入决定,另外

[apue] apue_db:一个可以充当"注册表"的 key-value 数据库

apue 最后两章都是通过一个完整的实例来解释一些 linux 功能,第20章就是通过一个数据库实例来解释文件锁的使用, 说实话,当时没兴趣,因为满页都是源码和解析,有点看不下去。但是再拾起来硬着头皮看的时候,发现这哪里是个小 demo,明明是个五脏俱全的 key-value 数据库嘛, 而且这个数据库,提

[apue] 使用 Ctrl+S停止输出而不用挂起前台进程

之前一直知道使用 Ctrl+Z 挂起前台进程来阻止进程运行,之后可以再通过 shell 的作业控制 (jobs / fg N) 来将后台进程切换为前台,从而继续运行。 最近学到一种新的方法,对于不停有 console 输出的前台进程,可以使用 Ctrl+S 来 STOP 一个进程的输出,从而暂停进程。 之后可以通过 Ctrl+Q

[apue] popen/pclose 疑点解惑

问题请看这里: [apue] 使用 popen/pclose 的一点疑问 当时怀疑是pclose关闭了使用完成的管道,因此在pclose之前加一个足够长的sleep,再次观察进程文件列表: 哈哈,这下都能看到了。同时可以看出来子进程more的管道是经过重定向的,定向到了标准输入(stdin,0) 还可以观察到,父进程不关闭管道,子

【APUE】第3章 文件I/O (2) 函数creat、lseek、read、write使用说明

1、函数creat 可以使用creat函数创建一个新文件。 1 #include<fcntl.h>2 int creat(const char *path, mode_t mode);3 4 返回值:5 若成功,返回为只写打开的文件描述符;6 若失败,返回-1 上述函数原型等价于: 1 open(path, O_WRONLY | O_CREAT | O_TRUNC, mode); 使用creat函数的一个

【APUE】进程一瞥

基本概念 程序:存放在磁盘文件中的可执行文件 进程:程序执行的实例(process) Cmd: ps ,top 进程ID:每个进程都有一个非负整数标识的唯一进程ID 0是调度进程,1是init进程,(大多数UNIX系统)2是页守护进程page daemon /*除了进程ID,进程还可以用下面的函数返回其他的标志符*/ #include <unis

实现终端打印 **world*hello**apue*******

#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <unistd.h>#include <sys/time.h>#include <signal.h>#include <string.h>typedef void (*sig_func)(void *);typedef struct{ int delay; sig_func handl

apue 在 mac 环境编译错误

笔者使用 mac 学习 apue, 在编译的时候出现错误,错误如下: Undefined symbols for architecture x86_64: "_TELL_CHILD", referenced from: _main in 14_5-4244a7.o "_TELL_PARENT", referenced from: _main in 14_5-4244a7.o "_TELL_WAIT", ref