1.Linux系统上的软件开发
操作系统:屏蔽底层不同的硬件平台
Linux内核:Linux操作系统的核心代码,包括对CPU管理、硬件设备管理、内存管理、文件系统管理、进程调度管理等
用户直接操作内核:
1.不安全
2.接口功能复杂
Shell作用:
1.保护内核
2.命令解释器
shell(大多操作命令),库函数(提供很多函数接口)
用户将命令交给shell,shell交给内核,内核去操作硬件,硬件再反馈给用户
2. Shell命令:
1.基本的shell命令:
ls,mv,cp,cd等等
2.文件查看命令:
1.cat 文件名 例:cat filed.txt
查看文件中的内容
2.grep 字符串 文件名 例:grep "printf" /usr/include/stdio.h
在文件名对应的文件中查找字符串相关的行
3.head -n 文件名
查看文件中的前n行
4.tail -n 文件名
查看文件中的最后n行
3.文件查找命令:
1.find 路径 -name 文件名
在路径下查找文件名对应的文件
2.locate 文件名
查找文件名对应的文件所在的路径
3.whereis 文件名
查找已经安装的二进制文件(软件)所在路径
4.压缩解压命令:
.tar.gz
.tar.bz2
压缩:
tar -zcvf 文件名.tar.gz 文件名/* 例:tar -zcvf homework.tar.gz homework/*
tar -jcvf 文件名.tar.bz2 文件名/*
解压:
tar -zxvf 文件名.tar.gz
tar -jxvf 文件名.tar.bz2
5.其余命令:
du -m/k 文件名 查看文件占用的空间大小(Mb/Kb)
echo 类似printf的功能,打印
6.通配符:
*:匹配任意长度任意字符的文件名
?:匹配一位长度任意字符的文件名
[a-z]:匹配a-z之间的任意字符 例:ls [a-z][1-9].txt
[1-9]:匹配1-9之间的任意字符
7.管道(|):
将前面命令的输出作为后续命令的输入
ps -ef 查看所有进程
ps -ef | grep bash 查看进程中与bash相关的进程
8.重定向:
> 覆盖重定向 例:echo helloworld > c.txt //c.txt中有helloworld
>> 追加重定向
注意:可以通过查看man 手册来查看命令或函数具体用法,调用man的方法例:man cat,
man printf
IO:输入输出
操作对象:文件
1.Linux系统一切皆是文件:
文件分类:
1.block b 块设备文件 按块扫描设备信息的文件
2.char c 字符设备文件 按字符扫描设备信息的文件
3.directory d 目录文件 保存或管理文件
4. - 普通文件 保存数据信息的文件(代码、图片、音视频、压缩包等)
5.link l 链接文件 指向其他文件的文件
6.socket s 套接字文件 用于进程间通信
7.pipe p 管道文件 用于进程间通信
2..特殊的流
stdin 标准输入流 行缓存
stdout 标准输出流 行缓存
stderr 标准错误流 不缓存
gets、getchar、scanf是基于stdin实现的
puts、putchar、printf是基于stdout实现的
perror是基于stderr
注:这些特殊流默认打开,不用使用fopen打开文件
3.setvbuf
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
功能:
改变流的缓存类型
参数:
stream:文件流
buf:缓存区的首地址
mode:
_IOFBF 全缓存
_IOLBF 行缓存
_IONBF 不缓存
size:缓存区大小
返回值:
成功返回0
失败返回非0
例:
4. fgetc、fputc
int fputc(int c, FILE *stream);
功能:
向流中写入一个字符
参数:
c:写入的字符
stream:文件流指针
返回值:
成功返回写入字符的ASCII码值
失败返回EOF(-1)
例:
fgetc
int fgetc(FILE *stream);
功能:
从流中读取下一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
失败或者读到文件末尾返回EOF
例: