看了《Linux程序设计》100来页,不得不吐槽一下翻译,实在没办法,在豆瓣上找到这本书《Unix/Linux编程实践教程》,翻了那么几十页,就爱上了这本书了。
下面是一些概念性的东东:
1.计算机用操作系统来管理所有的资源,并将不同的设备和不同的程序连接起来。
2.内存空间用来存放程序和数据,所有的程序都必须在内存空间中才能运行,用来容纳操作系统的内存空间叫系统空间,容纳应用程序的叫做用户空间。
3.内核(亦即OS),向程序提供服务以便程序能访问到设备。
4.系统资源
- 处理器
- I/O
- 进程管理(process management):指程序的一次运行,每个进程都有自己的资源,如内存,打开的文件和其他运行时所需的系统资源。
- memory
- device
- timers
- interprocess communication
- networking
5.在登录过程中,当用户名和密码通过验证后,系统会启动一个叫shell的进程,然后把用户交给这个进程,由这个进程处理用户的请求。
6.网络桥牌展示了UNIX系统的编程中3个重要的方面:
- 通信:某个用户或进程如何与其他用户和进程交换信息?
- 协作:在同一个时刻,网络桥牌的两个用户不会去拿同一张牌,程序如何来协调多个process来使他们没冲突地访问共享资源?
- 网络访问:计算机的程序如何使用网络?
7.命令也是程序
在UNIX上面添加新的命令很容易。把程序的可执行文件放到以下任意一个目录即可:/bin、/usr/bin、/usr/local/bin,这些目录存在很多系统命令,UNIX一开始没那么多命令,一些人编写特定的程序来解决某个特定问题。而其他人也觉得这程序有用,用得多了后,就成了标准命令了。
8.从UNIX中学习UNIX:
- 阅读联机帮助(如:$man who)
- 搜索联机帮助(如:$man –k utmp)
- 阅读.h文件
- 从参阅部分得到启示(SEE ALSO)
9.系统调用之OPEN、READ
1)open:在进程process和文件file之间建立一条连接,这个连接被称为文件描述符file descriptor,就像条由进程通向内核的管道。(大方框下面的阴影是kernel,最下面的阴影圆柱是硬盘)
文件描述符:如果文件被顺利打开,内核会返回一个正整数的值,此即文件描述符。打开文件会建立文件和进程之间的连接,文件描述符就是唯一标识这个连接的,若同时打开好几个文件,他们所对应的文件描述符是不同,如果将一个文件打开多次,对应的文件描述符也不同。
system call: open 目标 打开一个文件
头文件 #include<fcntl.h>
函数原型 int fd = open (char *name, int how)参数 name:文件名 how :O_RDONLY,O_WRONLY或O_RDWR
返回值 -1 错误 int 成功返回
2)read
在unistd.h头文件中,原型为:ssize_t numread = read (int fd, void *buf, size_t qty)。其中fd为文件描述符,buf为用来存放数据的目的缓冲区,qty为要读的字节数。
返回:-1,错误;numread,成功读取。