Linux 程序设计 第4版 陈健译 #3-#15

来源:互联网 发布:mac jenkins 启动 编辑:程序博客网 时间:2024/06/07 13:58
#3 文件操作


Linux 中一切都是文件
即使是超级用户可能也不再允许直接对目录进行操作。所有用户通常使用上层的opendir/readdir接口来读取目录。
目录 保存文件的节点号和名字的文件
删除一个文件实际上是删除了文件的目录


访问设备驱动的底层函数(系统调用)
open  -1 错误  正确 非负的文件描述符 
read   0 未读入数据  -1 错误  
write  返回0 表示未写入任何数据   返回-1 表示在write调用中出现了错误
close
ioctl 把控制信息传递给设备驱动文件  具体设备相关
系统调用 底层调用  的效率非常低
creat 创建文件


设置访问权限的起始值
lseek  读写指针设置
fstat stat lstat
当是符号文件 lstat返回符号文件本身信息  stat 返回指向文件内容
fread从文件流中读取数据
fwrite
fclose
fflush   调用fclose 函数隐含的执行了一次fflush
fseek 函数


fgetc  getc  getchar 读取字符  结束时返回  EOF


unlink 删除一个文件的目录项并减少它的链接数
link 系统调用在程序中创建一个文件的新链接
symlink 创建符号链接


mkdir  rmdir
切换目录  chdir   
确定当前的工作目录  getcwd




目录操作函数




扫描目录
目录操作  dirent.h  中声明
指向目录结构的指针  DIR*
opendir 失败返回空指针
readdir 记录目录流里的当前位置
telldir 设置目录流,的目录项指针
seekdir 错误-1
closedir




fcntl 对底层文件描述符操作
mmap  内存映射




#4 Linux环境


getopt
选项有关联值   optarg指向这个值
结束-1    --使getopt停止扫描选项
遇到无法识别的选项 getopt返回一个? 保存到尾部变量optopt  如果字符的第一个选项是冒号 那么将在未提供值的情况下返回: 而不是?


getopt_long   它接受--开始的参数






#日志
syslog 向系统的日志 发送日志信息






#5 章 终端
#6 使用curses函数库管理  基于文本的屏幕
#7 数据管理
动态内存管理:可以做什么以及Linux不允许做什么
文件管理:协调锁,共享文件的锁定区域和避免死锁
dbm数据库:一个大多数Linux系统都提供、基本的、不基于SQL的数据库函数库
简单的内存分配:
malloc
calloc 为一个结构数组分配内存,需要元素的个数和每个元素的大小作为参数,分配的内存初始化为0
realloc 改变原来分配的内存,可能需要移动数据,在申请时最好将原来的保存,否则万一分配失败,原来的也将丢失
free  释放内存
对空指针指向地址的读写提供了很强的保护


#文件锁定
1.原子操作
2.程序锁定文件的一部分
锁文件:只是建议锁,不是强制锁。
锁区域  fcntl和lockf(备用)


dbm 数据库


#8 MySQL
#9 开发工具
make  makefile 
RCS CVS 进行源代码管理
pach 和 tar 命令发布软件
开发环境


make 命令语法
make -k  在make发现错误时仍然继续运行
-n 让make命令输出将要执行的操作步骤
-f 将哪个文件作为make 文件


1.依赖关系
2.规则
 空格和制表符是tab有区别
 规则所在的行必须以制表符tab开头。
引用宏
$(..)  ${..}  

$? 当前目标所依赖的文件列表中比当前目标文件还要更新的文件
$@ 当前目标的名字
$< 当前依赖文件的名字
$* 不包括后缀名的当前依赖文件的名字


-符号 忽略所有的错误
@     告诉make在执行某条命令前不要将命令显示在表示在标准输出上
clean  删除不需要的目标文件
install


&& 与 后续命令只在前面的命令执行成功后才会执行后面的命令


#发行软件   patch




#10 调试
#11 进程和信号
进程和信号
进程:一个其中运行着一个或多个线程的地址空间和这些线程所需要的资源。


进程  pid进程号 1 为特殊进程init保留
进程有自己的 1)栈空间  2)环境空间 3)程序计数器
/proc  允许查看正在运行的进程的内部情况。
好像这些进程是目录中的文件一样。




启动新进程
system
fork  子进程0,
wait   父进程等待子进程






#12 章线程
pthread_exit  函数终止
pthread_join  等价于进程中wait函数
使用信号量进行同步
脱离进程   各自结束不返回主进程
pthread_cancel 取消一个进程






#13 章进程间通信:管道
进程管道
管道调用
父进程和子进程
命名管道:FIFO
客户/服务器架构


在程序中得到管道效果,将多个进程连接起来,实现一个简单的客户/服务器系统


进程管道:
popen  一个程序将另一个程序作为新程序来启动
pclose


相关的程序之间传递数据,由一个共同的祖先进程启动。
FIFO 在不相关的进程之间交换数据。命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式存在。




#14 章信号量、共享内存和消息队列
信号量 P V
共享内存  允许两个不相关的进程方位同一个逻辑内存。
shmget 
shmat
shmdt
shmctl


消息队列:与命名管道相比,消息队列优势在于,独立于发送和接收进程而存在。
提供了一种在两个不相关的进程间传递数据简单有效。




#15章 套接字
0 0
原创粉丝点击