首页 > 代码库 > <unix高级编程>笔记 chapter1
<unix高级编程>笔记 chapter1
os严格上是软件,为计算机提供资源和app运行环境. 特称为内核.
内核的接口被成为system call;然后库函数对system call进行了封装;shell是特殊app,为运行其他程序提供了一个接口.
shell是个命令行解释器,读取输入,执行命令.
unix文件系统是由directory和file组成.目录起点成为root,名字是/.
文件属性指类型\大小\所有者\权限以及修改时间.stat和fstat返回文件属性的结构.
比如下面操作:
2.文件名
只有/和null不能出现在文件名里.因为/用来分割构成路径名,null用来终止一个路径名.
创建新目录的适合会自动创建两个文件名.和..
点指当前目录,..指上一级目录.
3.路径名
一个或者多个/构成路径名.
以/开头指相对路径,否则是绝对路径. 其实经常用的是相对路径.
实战:
1.列出目录下的所有文件.就是实现ls功能.
#include <dirent.h> #include "stdio.h" #include "stdlib.h" int main(int argc, char** argv){ if (argc != 2){ printf("usage: ls dir_name\n"); return 1; } DIR* dp = opendir(argv[1]); if (NULL == dp){ printf("can't open %s\n", argv[1]); return 1; } printf("load dir success\n"); struct dirent* dirp = NULL; while ((dirp = readdir(dp)) != NULL) printf("%s ", dirp->d_name); printf("\n"); closedir(dp); return 0; }
从结果看出来 . 和.. 的确是有效目录.打印结果是无序的.而ls结果是有序的.
exit(0)标示程序正常退出.1-255表示错误码.
1.5 输入和输出
fd是个非负整数.是内核用来标示特定进程正在访问的文件.
每当shell被打开,都有三个默认fd被打开:stdin stdout stderror
另外shell可以方便地重定向.
3)不用缓冲的IO
open read close write lseek 提供了不用缓冲的IO
代码:
#include "stdio.h" #include "unistd.h" int main(){ int n = 0; const int maxLen = 4096; char buff[maxLen]; while ((n == read(STDIN_FILENO, buff, maxLen)) > 0){ if (write(STDOUT_FILENO, buff, n) != n){ printf("error\n"); exit(1); } } exit(0); }
标示这代码不是很理解,明天来看.
就学到这里.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。