文件系统:
做一个类ls的实现:如myls
补充内容:想创建名为 -a 的文件:
touch -a //报错
解决方法:
1:touch ./-a
2: touch -- -a
//--告诉命令选项结束。
一、目录和文件
1、获取文件属性:
- stat()
- fstat()
- lstat()
2、文件访问权限
st_mode是一个16位的位图
3、umask
作用:防止产生权限过松的文件
4、文件权限的更改/管理
- chomd()
- fchmod()
5、粘住位
t位(/tmp)
6、文件系统:FAT , UFS
文件系统:文件或数据的存储和管理
7、硬链接,符号链接
- link()
- unlink()
- remove()
- rename()
8、utime
9、目录的创建和销毁
- mkdir()
- rmdir()
10、更改当前工作路径
- chdir()
- fchdir()
- getcwd()
11、分析目录/读取目录内容
- glob()
- /*************************************/
- opendir()
- closedir()
- readdir(3)
- rewinddir()
- seekdir()
- telldir
二、系统数据文件信息
- /etc/passwd
- /etc/group
- /etc/shadow
- 时间戳
三、进程环境
1、main函数
int main(int argc , char **argv)
2、进程终止
正常终止:
从main函数返回
调用exit
调用_exit或者_Exit
//正确区分exit与_exit,看如下例子
int func()
{
return 0/1/2
}
int main()
{
int f;
f = func();
..........//做一系列事情
switch(f)
{
case 0:
case 1:
case 2:
default:
_exit();//这里要调用_exit。因为执行到这里说明程序出问题,应该立即退出,而不是调用exit完成io清理等工作再退出,以免错误扩散。
}
}
最后一个线程从其启动历程返回
最后一个线程调用pthread_exit
异常终止
调用abort
接到一个信号并终止
最后一个线程对其取消请求做出响应
3、命令行参数的分析
- getopt()
- getopt_long()
4、环境变量
extern char **environ;
- getenv()
- setenv()
- putenv()//参数没有const修饰,一般不用这个函数
5、c程序的空间布局
pmap(1)
6、库
- 动态库
- 静态库
- 手工装载库
dlopen()
dlclose()
dlerror()
dlsym()
//结合手册上的例子学习。提示:观看example时候关注void* 赋值给函数指针的问题
7、函数跳转
//场景:在一个深度为10000的树中查找一个结点。通常:递归查找,然后逐层返回。思考:查找过程并没有改变数据结构,当找到结点的时候是否可以直接跳出,而不需要逐层返回。类似与goto的功能,但goto不安全(不能跨函数跳转),所以引出如下两个函数。
- setjmp()
- longjmp()
8、资源的获取及控制
- getrlimit()
- setrlimit()