读书笔记-Linux程序设计

Linux程序设计

一、入门

  1. UNIX哲学 KISS keep it small and simple

  2. ASCII码文本文件或XML文件作为配置文件和数据文件

  3. Linux应用程序表现为两种类型文件:可执行文件和脚本文件

  4. Linux中文件扩展名除了人眼区别文件,没啥用

  5. 文件位置:

    • 应用程序 /usr/bin

    • 头文件/usr/include

    • 库文件 /lib /usr/lib

      • 静态库 p10

        归档文件.a archive

        ar crv libxxx.a *.o

        ranlib libxxx.a # 为库生成内容表(GNU不必要)

        nm libxxx.a #查看库中函数

      • 动态库 p11

        库可能是一个符号链接,尾数为主版本号 libm.soN

        负责装在动态库的程序是ld.so (/etc/ld.so.conf是装载配置文件)

        ldd program #可以查看使用到的库

二、shell程序设计

  1. shell执行shell程序,这些程序通常称为脚本

  2. 一点哲学:代码的高度可重用性,即一个程序只完成一个功能,但是完成的很完美

  3. 管道和重定向

  4. 通用的回收站==/dev/null==

  5. shell程序设计里,0表示成功,why?

  6. 设置环境变量,export PATH=$PATH:xxx或者编辑bash_profile文件

  7. ./指定当前路径,和windows的cmd中不一样,必须写./ 这样可以避免意外执行到了同名脚本文件的命令

  8. shell语法

    • 变量、环境变量、参数变量、条件、控制结构

    • 点(.)命令

      1. 执行文件时候的./xxx的点命令,等同于source命令

      2. ==*==通常一个脚本执行的时候,它会创建一个新的环境(一个子shell),命令将在这个新环境里面执行,执行完毕便丢弃该环境,留下退出码返回给父shell、

      3. 退出码为0表示成功。用0表示,这一做法的一个大优点是:它使得你可以使用多达125个用户自定义的错误代码,而不需要一个全局的错误代码变量(这一句话不是很理解)p46

    • shift命令 左移参数变量

    • trap命令 用于指定接收到信号后将要采取的行为

    • unset命令 从环境变量中删除变量或者函数

    • find命令 搜索文件的命令

      #根目录开始寻找文件名为test的路径并且打印出来
      find / -name test -printf
      #不搜索挂载的目录
      find / -mount -name test -printf
      
    • grep命令 general Regular Expression Parser 在文件中搜索字符串的命令

    • 正则表达式

      #查找以字母e结尾的行
      grep e$ test.txt
      
    • here文档

  9. 迈向图形化:dialog工具

  10. 综合应用:管理CD唱片程序

三、文件操作

  1. 在linux,一切都是文件

  2. 目录也是文件,不过是一种特殊类型的文件

    目录除了本身包含的内容以外,还会拥有一个名字和一些属性,即管理信息。保存在inode中。

  3. 重要的3个设备文件:/dev/console、 /dev/tty、/dev/null

  4. 操作系统的核心为内核,是一组设备驱动程序,是一组对系统硬件进行控制的底层接口。每个驱动函数都定义组他自己的ioctl命令

  5. write\read\open\close系统调用

  6. TIMEFORMAT time 重置POSIX时间输出格式

  7. dup\dup2 复制文件描述符的方法

  8. 标准IOfread\fwrite\fclose\fopen\fflush\fseek\fgetc\fgets

  9. 格式化输出输入

  10. 文件和目录的维护 chmod\chown\unlink\link\syslink系统调用 mkdir\rmdir \chdir\getcwd

  11. 扫描目录opendir\readdir\telldir\seekdir\closedir 目录文件扫描程序

  12. 错误处理 strerror\perror

  13. /proc文件系统

  14. 高级主题:fcntl和mmap

四、linux环境

  1. int main(int argc, char * argv[])

    argc,argv参数往往由用户终端输入,由另一个程序提供,这个程序一般是shell,要求操作系统启动该新程序,shell接受用户输入的命令行,将命令行分解成单词,然后将这些单词放入argv数组中

  2. getopt c语言程序中提供命令行开关的标准编程接口

    将传递给成程序的main函数的argc和argv作为残烛,同时接受一个选项指定字符擦混optstring,该字符串告诉getopt哪些选项可用,以及它们是否有关联度。optstring只是一个字符串列表,冒号’:'连接各字符串选项

  3. getipt_long 区别在于针对 – 。 至于-和–选项的事情和unix的发展有关

  4. 环境变量 getenv\putenv

  5. 时间和日期 time\gmtime\mktime\localtime\ctime\asctime\strptime\strftime

  6. 用户信息 /etc/shadow文件 getpwuid\getpwnam

  7. 主机信息 uname\gethostname\gethostid

  8. 日志 /usr/adm、 /var/log syslog\openlog\closelog\setlogmask

  9. 资源和限制

五、终端

  1. 标准模式和非标准模式

    终端允许用户回退删除字符,这样称之为规范模式,也叫标准模式

  2. linux将LF表示一行的结束,这样做可以使得文本文件和二进制文件无任何实际的区别(这里怎么理解?answer),只有对IO设备才需要对回车符CR做处理

  3. 与终端进行对话 使用/dev/tty

  4. 终端驱动程序和通用终端接口GTI(联想到GUI、CLI)

  5. termios结构 控制终端接口,控制键盘的输入

  6. 终端的输出 printf函数将字符输出到屏幕上,但还没有办法将输出的内容放置在屏幕的特定位置 p162

  7. unix编写的程序很少去等待某个事件的发生,例如检测击键动作

  8. 虚拟控制台

  9. 伪终端PTY

六、使用curses函数库管理基于文本的屏幕

  1. curses标准作为一个重要的过渡,位于简单的文本行程序和完全图形化界面的X视窗系统程序之间
  2. 所谓屏幕就是你正在写的设备,终端屏幕或者是xterm屏幕?
  3. 键盘
  4. 窗口
  5. 彩色显示
  6. CD唱片应用程序 p200

七、数据管理 CSDN

  1. X/Open规范使UNIX风格操作系统以一种干净的方式来管理内存,不允许直接访问物理内存
  2. Linux为应用程序提供了一个简洁的视图,反映一个巨大的可直接寻址的内存空间
  3. DOS下的程序不能访问超过640k内存映射限制的内存范围
  4. malloc—>32位平台内存模型 p215
  5. test:请求全部的物理内存p216
  6. swap space交换空间
  7. 空指针、释放内存
  8. 动态内管理 简单的内存分配程序和请求全部的物理内存
  9. 文件锁定 原子操作创建锁文件
  10. 锁定文件区域
  11. 死锁p236
  12. dbm数据库

八、MySQL

  1. 检查MySQL服务器是否正在运行

    ps -ef | grep mysqld
    

九、开发工具

  1. make命令和makefile文件
  2. 用make管理函数库
  3. 源代码控制 SCCS\RCS\CVS
  4. 编写手册页
  5. 发行软件 patch工具程序
  6. 其他软件发行工具
  7. RPM软件包管理程序
  8. Linux的IDE:KDevelop

十、调试

  1. 错误类型:功能定义错误、设计规划错误、代码编写错误
  2. 空运行 dry running
  3. 固化:让程序的错误可重现
  4. gdb
  5. 栈跟踪
  6. 用调试器打补丁
  7. 函数调用工具
  8. 用prof/gprof产生执行存档
  9. 断言assert
  10. valgrind 调试内存的工具

十一、进程和信号

  1. 进程表 早期UNIX系统只能同时运行256个进程,现在版本取决于进程表的内存容量。
  2. ps 查看进程
  3. 用户初始登陆是在第4个虚拟终端完成的,该终端是这台机器的一个主控台。
  4. init进程 操作系统的进程管理器
  5. getty进程
  6. 进程调度 状态R+表示这个程序是一个前台任务
  7. nice程序 表现良好的程序 nice值默认为0 nice命令和renice命令 终端显示NI 表示优先级
  8. fork exec wait
  9. 僵尸进程
  10. 信号 raise catch
  11. -HUP
  12. 线程不安全,可以设置一个标志位,进行检查
  13. 信号集

十二、POSIX线程

  1. 一个简单的线程程序p419
  2. 两个线程同时执行p422
  3. 同步
  4. 脱离状态
  5. 调度
  6. 取消一个线程
  7. 多线程

十三、进程间通信

  1. 管道
  2. 使用FIFO的客户/服务器应用程序 p468

十四、信号量、共享内存和消息队列

  1. Dekker算法 ”忙等待“或者”自旋锁“
  2. 信号量,一个只有两个值PV的变量,并且程序对其的访问都是原子操作
  3. 设置一个普通变量作为信号量不行吗? p489
  4. LInux信号量机制
  5. 共享内存
  6. 消息队列
  7. IPC状态命令 ipcs p511

十五、套接字

  1. 套接字既可以本地,也可以不同主机,主要是不同主机之间的进程通信。
  2. 本地套接字的名字是linux文件系统中的文件名,一般放在/tmp或者/usr/tmp
  3. 网络套接字 文件系统套接字
  4. localhost 127.0.0.1 /etc/hosts
  5. 主机字节序和网络字节序
  6. netstat命令查看网络连接状况 (记得删除已经连接的服务器进程)
  7. NIS 网络信息服务 Yellow Pages黄页服务
  8. getname
  9. 因特网守护进程xinetd/inetd
  10. 套接字选项’
  11. 多客户 select系统调用
  12. 数据报

十六、GTK+

  1. X视窗系统 一个开源图形化系统
  2. Linux两大桌面系统 :GNOME和KDE
  3. GUI编程关键元素:事件event 信号signal 窗口管理器
  4. 创建GUI的其他方法:平台无关的窗口API
  5. 拖放技术
  6. GTK+对象系统
  7. GNOME GNU Network Object Model Environment GNU网络对象模型环境
  8. Microsoft OLE?
  9. 事件、信号和回调函数(事件监听系统)
  10. 组装盒构件 GUI布局
  11. 控件
  12. 模式对话框和非模式对话框

十七、QT和KDE

  1. 信号和槽 p596 signals slots
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值