Skip to content

Commit

Permalink
format code
Browse files Browse the repository at this point in the history
  • Loading branch information
MeiK2333 committed Jun 25, 2018
1 parent 821ac84 commit cc1e456
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 102 deletions.
56 changes: 23 additions & 33 deletions Chapter-01/README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
## UNIX 基础知识
# UNIX 基础知识

## 随书代码

### 随书代码
### 1.4.3.c


#### 1.4.3.c
列出指定目录下的所有文件

```shell
$ gcc 1.4.3.c -lapue
$ ./a.out .
Expand All @@ -18,8 +18,7 @@ apue_error.h

```


#### 1.5.3.c & 1.5.4.c
### 1.5.3.c & 1.5.4.c

读取标准输入并写入标准输出

Expand All @@ -35,8 +34,7 @@ Hello World!
> ^D
```


#### 1.6.2.c
### 1.6.2.c

打印当前进程的PID

Expand All @@ -50,8 +48,7 @@ hello world from process ID 854

标准保证 pid_t 可以保存在一个长整型中,因此为了保证可移植性,将其强制转换为长整型保存和输出。


#### 1.6.3.c
### 1.6.3.c

从标准输入读命令并执行

Expand All @@ -71,8 +68,7 @@ meik ttys005 Apr 20 11:44
% ^D
```


#### 1.7.c
### 1.7.c

测试 strerror 和 perror

Expand All @@ -83,12 +79,12 @@ EACCES: Permission denied
./a.out: No such file or directory

```

```strerror``````errnum``` 映射为一个错误消息字符串,并返回此字符串

```perror``` 基于 ```errno``` 的当前值,在标准错误(stderr)上产生一条出错消息


#### 1.8.c
### 1.8.c

打印用户 ID 和组 ID

Expand All @@ -98,8 +94,7 @@ $ ./a.out
uid = 501, gid = 20
```


#### 1.9.c
### 1.9.c

监听信号测试

Expand All @@ -115,13 +110,11 @@ $ kill 90612
% Terminated: 15
```

## 习题

### 习题


#### 1.1
**在系统上验证,除根目录外,目录 . 和目录 .. 是不同的**
### 1.1

**在系统上验证,除根目录外,目录 . 和目录 .. 是不同的**
通过编写代码 [p1.c](p1.c) ,验证 . 和目录 .. 不同

```shell
Expand All @@ -132,21 +125,20 @@ $ ls -ldi /. /..
2 drwxr-xr-x 25 root root 4096 4月 26 15:45 /.
2 drwxr-xr-x 25 root root 4096 4月 26 15:45 /..
```

- -d 仅打印目录信息
- -i 打印文件或目录的 i 节点编号

可见,对除了根目录外的目录, . 和 .. 是不同的。

### 1.2

#### 1.2
**分析 [1.6.2.c](1.6.2.c) 的输出,说明进程 ID 为 852 和 853 的进程发生了什么情况**

**分析 [1.6.2.c](1.6.2.c) 的输出,说明进程 ID 为 852 和 853 的进程发生了什么情况**
Unix 系统下,创建一个新的进程时,内核顺序分配 PID ,第一次运行程序和第二次运行程序之间的时间里,系统里创建了两个新的进程

### 1.3

#### 1.3
**[1.7.c](1.7.c) 中, perror 的参数是用 ISO C 的属性 const 定义的,而 strerror 的整形参数没有用此属性定义,为什么?**

**[1.7.c](1.7.c) 中, perror 的参数是用 ISO C 的属性 const 定义的,而 strerror 的整形参数没有用此属性定义,为什么?**
下面是两个函数的定义:

```C
Expand All @@ -161,18 +153,16 @@ void perror(const char *msg);
```perror``` 传递的参数为 ```const char *``` 类型,传递的是对应的地址,如果不使用 ```const``` 限定的话,那么如果在函数内修改了值,函数外的变量值也会变化
### 1.4
#### 1.4
**若日历时间存放在带符号的 32 位整型数中,那么到哪一年它将溢出?可以用什么办法扩展溢出浮点数?采用的策略是否与现有的应用相兼容?**
**若日历时间存放在带符号的 32 位整型数中,那么到哪一年它将溢出?可以用什么办法扩展溢出浮点数?采用的策略是否与现有的应用相兼容?**
32 位整型数的最大值为 2147483647 ,大概为 68.09626 年。通过查询可知,最大可表示到 2038-01-19 11:14:07
使用 IEEE754 编码扩展(double),与现有的应用不一定兼容。
### 1.5
#### 1.5
**若进程时间存放在带符号的 32 位整型数中,而且每秒为 100 时钟滴答,那么经过多少天后该时间值将会溢出?**
**若进程时间存放在带符号的 32 位整型数中,而且每秒为 100 时钟滴答,那么经过多少天后该时间值将会溢出?**
[p5.c](p5.c)
```shell
Expand Down
41 changes: 19 additions & 22 deletions Chapter-02/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
## UNIX 标准及实现
# UNIX 标准及实现

## 随书代码

### 随书代码
### 2.5.1.c


#### 2.5.1.c

```<limits.h>``` 中定义的整型值大小
<limits.h> 中定义的整型值大小

```shell
$ gcc 2.5.1.c
Expand All @@ -29,37 +27,36 @@ LLONG_MAX: 9223372036854775807
LLONG_MIN: -9223372036854775808
ULLONG_MAX: 18446744073709551615
MB_LEN_MAX: 6
```

```

#### 2.5.4.awk && 2.5.4.c
### 2.5.4.awk && 2.5.4.c

```shell
$
$ awk -f 2.5.4.awk > conf.c
$ gcc conf.c -lapue

```

[conf.c](conf.c)


#### 2.5.5.2.c
### 2.5.5.2.c

```shell
$ gcc 2.5.5.2.c -lapue
$ ./a.out
10240
```

## 习题

### 习题


#### 2.1
**在 2.8 节中提到一些基本系统数据类型可以在多个头文件中定义。例如,在 FreeBSD 8.0 中,size_t 在29 个不同的头文件中都有定义。由于一个程序可能包含这 29 个不同的头文件,但是 ISO C 却不允许对同一个名字进行多次 typedef ,那么如何编写这些头文件呢?**
### 2.1

**在 2.8 节中提到一些基本系统数据类型可以在多个头文件中定义。例如,在 FreeBSD 8.0 中,size_t 在29 个不同的头文件中都有定义。由于一个程序可能包含这 29 个不同的头文件,但是 ISO C 却不允许对同一个名字进行多次 typedef ,那么如何编写这些头文件呢?**
使用宏定义保护。

```
```c
#ifndef _MACHINE_TYPES_H_
#define _MACHINE_TYPES_H_

Expand All @@ -73,18 +70,17 @@ typedef _uint32_t _size_t;
.........

#enddef
```

```
#### 2.2
**检查系统的头文件,列出实现基本系统数据类型所用到的实际数据类型**
### 2.2
**检查系统的头文件,列出实现基本系统数据类型所用到的实际数据类型**
待续
### 2.3
#### 2.3
**改写图2-17中的程序,使其在 ```sysconf``````OPEN_MAX``` 限制返回 ```LONG_MAX``` 时,避免进行不必要的处理**

**改写图2-17中的程序,使其在 ```sysconf``` 为 ```OPEN_MAX``` 限制返回 ```LONG_MAX``` 时,避免进行不必要的处理**
在 ```sysconf``` 没有能够准确获得 ```OPEN_MAX``` 限制的时候,可以使用 ```getrlimit``` 来获得。
```C
Expand All @@ -105,4 +101,5 @@ long open_max()
}
return(openmax);
}
```
Loading

0 comments on commit cc1e456

Please sign in to comment.