以企业介绍为主做外贸网站好吗,简洁的公司网站,wap 网站 手机,聚名网站1.回顾一下文件
我们之前对文件的理解是在语言层上#xff0c;而语言层去理解文件是不可能的#xff01;#xff01;#xff01;
下面是一份c语言文件操作代码#xff01;#xff01;#xff01;
#includestdio.h int main()
{FILE* fd fopen(lo…1.回顾一下文件
我们之前对文件的理解是在语言层上而语言层去理解文件是不可能的
下面是一份c语言文件操作代码
#includestdio.h int main()
{FILE* fd fopen(log.txt, w);if(fd NULL){perror(fopen);return 1;}fclose(fd); return 0;
} 我们要进行文件操作前提是我们的程序跑起来了。
文件打开和关闭是是CPU在执行我们的代码。 w含义
1.如果不存在就在当前路径下新建指定的文件。
2.默认打开文件的时候。就先把目标文件清空--》所以可以用来新建文件清空文件 我们又使用输出重定向符号操作文件我们发现文件被清空了输出重定向一定是文件操作
2.文件进一步理解
打开文件本质其实进程task_struct打开文件(struct xxxx)
文件没有被打开时在哪里磁盘存在
1.进程能打开很多文件吗可以
2.系统中可不可以存在很多进程呢
很多情况下os内部一定存在大量的被打开的文件。OS要不要把这些打开的文件进行管理呢
重点来了讲到管理就要先描述在组织
那预言一波可知每一个被打开的文件在OS内部一定要存在对应的描述文件属性的结构体类似PCB。
文件 属性 内容。 7 int main()8 {9 FILE* fp fopen(log.txt, a);10 if(fp NULL)11 {12 perror(fopen);13 return 1; 14 }15 fprintf(fp, hello Linux!, %d, 10);16 17 fclose(fp);18 return 0;19 }a含义:向文件中追加字符串不会清空文件。
且追加重定向符号也可作此操作可见重定向操作一定是文件操作
c/c/java/python访问文件的方式有些不一样
3.理解文件
a.操作文件本质进程在操作文件。进程和文件的关系
b.文件-磁盘-外设-硬件-向文件中写入本质是向硬件中写入-用户没有权利直接写入-OS是硬件的管理者-通过OS写入-OS必须给我们提供系统调用OS不相信任何人访问文件我们也可以使用系统调用啊-fopen/fread/fwrite/fclose/scanf/cin/cout?-我们用的c/c...都是对系统调用接口的封装
为什么怎么办 认识一下系统调用并且使用。
#includestdio.h
#includeunistd.h
#includesys/types.h
#includesys/stat.h
#includefcntl.h int main()
{ umask(0); int fd open(bite1.txt, O_WRONLY | O_CREAT, 0666); if(fd 0) { perror(open); return 1; } close(fd); return 0;
}
这是一个使用系统调用操作文件的程序那么umask是可以设置 当前进程的掩码为0使得我们在open第三个参数设置权限位时不会受到掩码的影响。
第二个参数是用的宏来代表是写还是读等操作以位图的方式存储对应数据。 32个比特位。用比特位来进行标志位的传递。 ---- OS设计很多系统调用接口的方法。 open: 以写的方式打开不存在就创建存在就先清空 open与fopen什么联系 0标准输入键盘
1标志输出显示器
2标志错误显示器 这些又有什么联系
我们在进程中去打开多个文件时的open返回值从3开始依次增加是怎么回事
文件描述符fdfd的本质是什么?
那就说个结论吧其实是内核的进程文件映射关系的数组的下标 我们已经理解什么是fd0,1,2默认打开了
0标准输入键盘
1标志输出显示器
2标志错误显示器
硬件啊-理解Linux一切皆文件 struct file中有函数指针同一个指针会指向不同的方法这不就是我们C学习到的面向对象中的多态吗
那把c语言struct看做类。
如果我们用c实现类
所以以上内容就都能贯通了本质是c语言中的文件操作函数底层都是对系统调用接口的封装封装了系统调用的细节。
所以就理解了Linux一切皆文件
4.c语言为什么要这么做 可以使用系统调用也可以使用语言提供的文件方法 系统不同系统调用接口可能不一样 代码就不具备平台性 所以所有的语言都想具有跨平台性 所有的语言要对不同的平台的系统调用进行封装 不同的语言封装的时候文件接口就有差别了