Linux程序设计
1 Shell
Shell 是指Linux的用户界面,用户通过这个界面访问操作系统内核的服务。
Shell也是一种解释型程序语言。
常见的Shell种类:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
2 Linux服务器
Linux作为服务器的操作系统的优势:
- Linux开源免费;
- 稳定性好,可以连续多年使用;
- 安全,病毒少;
- 开发环境好,有各种开源环境。
3 Linux文件结构
Linux文件系统是分层树型结构,在根目录“/”下有许多子目录,比如:
- /bin:存放着最经常使用的命令
- /etc:存放所有的系统管理所需要的配置文件和子目录
- /home:用户的主目录,每个用户都有一个自己的目录
- /root:系统管理员的用户主目录
- /lib:存放着系统最基本的动态连接共享库
- /usr:用户的应用程序和文件都放在这个目录下,类似于windows下的Program Files目录
4 Linux文件权限
- r - - 读权限
- r w - 读写权限
- r w x 读写执行权限
通过chmod命令可以修改权限。
5 Linux常用命令
命令 | 功能 |
---|---|
ls | 显示当前目录文件 |
mkdir | 创建目录 |
rmdir | 删除目录 |
rm | 删除文件 |
cp | 拷贝文件 |
mv | 移动文件或重命名 |
tail | 显示文件尾部 |
head | 显示文件头部 |
gzip | 压缩 |
tar | 打包 |
tar -cvf | 打包并压缩 |
tar -zxvf | 解压 |
6 并发执行命令
&并发执行 ; 顺序执行
7 Shell编程
- 用vim编写命令行并保存
- 用chmod +x 设置可执行权限
- ./文件名执行
Shell编程中的变量需要加上$符号。
8 Linux C的编译
gcc c源文件 -o 目标文件
g++ c++源文件 -o 目标文件
利用-O2可以进行代码优化
9 gcc的编译过程
hello.c——预处理,头文件插入——hello.i——汇编——hello.s(汇编代码)——hello.o(二进制代码)——链接——hello(可执行文件)
10 Make和Makefile
make可以快速进行文件编译,可以只编译修改过的依赖文件
Makefile文件格式:
目标文件:依赖文件
产生依赖文件的命令
11 Linux的调试工具
GBD调试工具:常用命令有
break 行号 //设置断点
next //逐行执行
12 Linux C的系统函数
system函数 调用shell命令
文件操作:
文件打开 open、fopen
文件读取 read、fread
文件写入 write、fwrite
13 进程
fork 常见父进程的复制,fd=fork(),fd为0表示创建成功
僵尸进程:没有父进程的子进程
14 守护进程
守护进程是指在后台运行的特殊进程
创建守护进程的方法:
- 创建子进程,终止父进程并释放相关资源
- 创建新会话
- 改变工作目录
15 进程通信方式
- 管道
- 系统IPC(消息队列、信号、共享内存)
- 套接字socket
16 网络程序设计
函数 | 功能 |
---|---|
int socket(IP地址类型,套接字类型,传输曾协议) | 创建套接字 |
bind() | 用于将socket与本机上的一个端口绑定 |
connect() | 用于客户端发起连接 |
listen() | 用于服务器监听端口 |
accept() | 用于服务器接收客户连接请求 |
send(socket描述符,输出指针,数据长度) | 用于数据发送 |
recv(socket描述符,数据缓冲区,缓冲长度) | 用于数据接收 |
17 死锁
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的相互等待的现象。
死锁产生的条件:
- 互斥条件:一个资源每次只能被一个进程使用。
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。