西南大学校园网站建设往年考试卷爱心代码html简单
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:10
当前位置: 首页 > news >正文
西南大学校园网站建设往年考试卷,爱心代码html简单,十种网络推广的方法,长沙网站推广¥做下拉去118cr目录 预备知识 复习C文件IO相关操作 printf相关函数 fprintf snprintf 读取文件 系统文件IO操作 open函数 umask()函数 open函数返回值 预备知识 1.你真的理解文件原理和操作了吗#xff1f;不是语言问题#xff0c;是系统问题2.是不是只有C/C有文件操作呢#x…目录 预备知识 复习C文件IO相关操作 printf相关函数 fprintf snprintf 读取文件 系统文件IO操作 open函数 umask()函数 open函数返回值 预备知识 1.你真的理解文件原理和操作了吗不是语言问题是系统问题 2.是不是只有C/C有文件操作呢 不是Javapythongo都有他们的文件操作方法是不一样的如何处理这种现象呢 有没有一种统一的视角看待所有的语言文件从操作呢 3.操作文件的时候第一件事情就是打开文件打开文件时做什么呢如何理解呢 4.文件 内容 属性 - 针对文件的操作对内容的操作对属性的操作 5.当文件没有被操作的时候文件一般会在什么位置 磁盘 6.当我们对文件进行操作的时候文件需要在哪里 内存为什么呢 因为CPU和内存交互 7.当我们对文件进行操作的时候文件需要提前被load到内存load是内容还是属性 属性因为一个文件至少得有属性 8.当我们对文件进行操作的时候文件需要提前被load到内存是不是只有你一个人在load呢不是内存中一定存在大量的不同文件的属性 9.所以综上打开文件本质就是将需要的文件属性加载到内存中OS内部一定会同时存在大量的被打开的文件那么操作系统要不要管理这些被打开的文件呢 要OS需要先描述在组织。 先描述构建在内存中的文件结构体struct file{struct file* next}就可以从磁盘来被打开的文件 a.每一个被打开的文件都要在OS内对应文件对象的struct结构体可以将所有的struct file结构体用某种数据结构链接起来–在OS内部对被打开的文件进行管理就被转换成为了对链表的增删查改。 结论文件被打开OS要为被打开的文件创建对应的内核数据结构 struct file { //各种属性 //各种链接关系 } 10.文件其实可以被分开两大类磁盘文件被打开的文件(内存文件) 11.文件被打开是谁打开呢OS,但是是谁让OS打开的呢用户(进程为代表的) 12.我们之前的所有的文件操作都是进程和被打开文件的关系 13.都是进程和被打开文件的关系struct stak_struct和struct file复习C文件IO相关操作 下面是用C语言实现对文件log.txt进行操作 #include stdio.h #define LOG log.txtint main() {// w:默认写方式打开文件如果文件不存在就创建它// 默认如果只是打开文件内容会自动被清空// 同时每次进行写入的时候都会从最开始进行写入FILE *fp fopen(LOG, w);if (fp NULL){perror(fopen fail);return 1;}// 正常进行文件操作const char *msg hello linux\n;int cnt 5;while (cnt){fputs(msg, fp);cnt–;}fclose(fp); // 关闭文件return 0; } 成功创建了log.txt文件打开文件 printf相关函数 printf 默认是向显示器读取 int main() {// w:默认写方式打开文件如果文件不存在就创建它// 1. 默认如果只是打开文件内容会自动被清空// 2. 同时每次进行写入的时候都会从最开始进行写入FILE *fp fopen(LOG, w);if (fp NULL){perror(fopen fail);return 1;}// 正常进行文件操作const char *msg hello linux;int cnt 5;while (cnt){fprintf(fp, %s:%d:phw\n, msg, cnt);cnt–;}fclose(fp); // 关闭文件return 0; } fprintf fprintf(stdout, %s:%d:phw\n, msg, cnt); // Linux一切皆文件stdout也对应一个文件显示器文件 snprintf 写入到buffer缓冲里 下面测试一下将msg改成phw 这里得出结论, “w为覆盖式写入 追加式写入a选项 读取文件 系统文件IO操作 open函数 pathname: 要打开或创建的目标文件 flags: 打开文件时可以传入多个参数选项用下面的一个或者多个常量进行“或”运算构成flags。 参数: O_RDONLY: 只读打开 O_WRONLY: 只写打开 O_RDWR : 读写打开 这三个常量必须指定一个且只能指定一个 O_CREAT : 若文件不存在则创建它。需要使用mode选项来指明新文件的访问权限 O_APPEND: 追加写 O_TRUNC:清空文件内容 返回值 成功新打开的文件描述符 失败-1 下面是标志位的举例程序 #define ONE 0x1 #define TWO 0x2 #define THREE 0x4 #define FOUR 0X8 #define FIVE 0X10void Print(int flags) {if (flags ONE)printf(hello 1\n);if (flags TWO)printf(hello 2\n);if (flags THREE)printf(hello 3\n);if (flags FOUR)printf(hello 4\n);if (flags FIVE)printf(hello 5\n); }int main() {printf(——————-\n);printf(ONE);printf(——————-\n);printf(TWO);printf(——————-\n);printf(FOUR);printf(——————-\n);printf(ONE | TWO);printf(——————-\n);printf(ONE|TWO|THREE);printf(——————-\n);printf(ONE|TWO|THREE|FOUR|FIVE);printf(——————-\n);return 0; } open函数测试 #include stdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #define LOG log2/txt// 系统方案 int main() {int fd open(LOG, O_WRONLY);printf(fd:%d\n, fd);return 0; } 文件不存在 #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include errno.h #define LOG log2/txt// 系统方案 int main() {int fd open(LOG, O_WRONLY |O_CREAT);if (fd -1){printf(fd:%d,errno:%d,errstring:%s\n, fd, errno, strerror(errno));}else{printf(fd:%d,errno:%d,errstring:%s\n, fd, errno, strerror(errno));}close(fd);return 0; } 我们在使用open函数的时候不仅要O_WRONLY (写)还要创建O_CREAT 但是这种方式创建的文件是没有权限的。 其中参数mode就是权限 因为umask默认权限的原因 umask()函数 umask() 函数的参数为一个八进制数它的每一位分别表示对应的文件权限是否会被屏蔽掉例如umask(022) 表示屏蔽掉写入权限和执行权限。 umask(0)这意味着没有任何权限被屏蔽掉。 将mask初始化为0 成功将文件的权限设置成自己想要的 wirte()函数 这里的strlen不需要1\0是C语言的规定不是文件的规定\0会被解释成乱码 O_WRONLY | O_CREAT 默认不会对原始文件内容做清空需要加上O_TRUNC O_APPEND | O_CREAT 不会追加写需要加上O_WRONLY #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include errno.h #include string.h #define LOG log.txt// 系统方案 int main() {umask(0);int fd open(LOG, O_RDONLY, 0666);if (fd -1){printf(fd:%d,errno:%d,errstring:%s\n, fd, errno, strerror(errno));}else{printf(fd:%d,errno:%d,errstring:%s\n, fd, errno, strerror(errno));}char buffer[1024];// 这里无法做到按行读取我们是整体读取的ssize_t n read(fd, buffer, sizeof(buffer) - 1); //使用系统接口来进行IO的时候一定要注意\0的问题if (n 0){buffer[n] \0;printf(%s\n, buffer);}close(fd);return 0; }open函数返回值 在认识返回值之前先来认识一下两个概念: 系统调用和库函数 上面的 fopen fclose fread fwrite 都是C标准库当中的函数我们称之为库函数libc。 而 open close read write lseek 都属于系统提供的接口称之为系统调用接口 回忆一下我们讲操作系统概念时画的一张图 系统调用接口和库函数的关系一目了然。 所以可以认为f系列的函数都是对系统调用的封装方便二次开发。
- 上一篇: 西丽网站的建设小程序商店登录
- 下一篇: 西宁的网站建设美食网站开发步骤
相关文章
-
西丽网站的建设小程序商店登录
西丽网站的建设小程序商店登录
- 技术栈
- 2026年03月21日
-
西湖区网站建设专业的o2o网站建设
西湖区网站建设专业的o2o网站建设
- 技术栈
- 2026年03月21日
-
西瓜网站建设钢板出租铺路钢板出租
西瓜网站建设钢板出租铺路钢板出租
- 技术栈
- 2026年03月21日
-
西宁的网站建设美食网站开发步骤
西宁的网站建设美食网站开发步骤
- 技术栈
- 2026年03月21日
-
西宁电商网站制作公司网页布局设计类型
西宁电商网站制作公司网页布局设计类型
- 技术栈
- 2026年03月21日
-
西宁建设网站软件上海公司章程在哪里可以查询打印
西宁建设网站软件上海公司章程在哪里可以查询打印
- 技术栈
- 2026年03月21日
