系统调用方式文件编程题库
puthon练习题

一、基础语法1. 变量和数据类型定义变量并赋值数据类型转换列表和元组操作2. 控制流条件语句循环语句break和continue语句3. 函数定义和调用函数递归函数默认参数和可变参数4. 模块和包导入模块模块中的函数和变量创建自定义模块二、面向对象编程1. 类和对象创建类和实例化对象类的继承方法重写和多态2. 属性和装饰器属性的getter和setter类装饰器方法装饰器3. 封装和抽象封装原理抽象类和抽象方法抽象基类4. 异常处理tryexcept语句自定义异常异常传播三、文件操作1. 文件读取打开和关闭文件读取文件内容文件读取示例2. 文件写入写入文件内容文件追加文件写入示例3. 文件路径路径操作文件路径示例四、网络编程1. 基础网络TCP/IP协议套接字编程基础网络示例2. HTTP请求发送HTTP请求获取HTTP响应HTTP请求示例3. 请求使用SSL/TLS加密请求示例五、数据结构和算法1. 列表列表操作列表排序列表示例2. 集合集合操作集合示例3. 字典字典操作字典示例4. 排序算法冒泡排序选择排序快速排序5. 查找算法线性查找二分查找哈希表查找六、数据库操作1. SQLite数据库创建数据库和表插入、更新、删除数据查询数据2. MySQL数据库连接MySQL数据库创建表和索引数据操作3. ORM框架使用Django ORM使用FlaskSQLAlchemy ORM示例七、Web开发1. Flask框架创建Flask应用路由和视图模板渲染2. Django框架创建Django项目模型、视图、模板表单处理3. JavaScript和jQuery基础JavaScript语法 jQuery操作DOMAJAX请求八、自动化测试1. 单元测试使用unittest模块编写测试用例测试覆盖率2. 集成测试使用pytest模块编写集成测试用例测试环境配置3. 自动化测试框架使用Selenium使用Robot Framework自动化测试示例九、并发编程1. 多线程创建线程线程同步线程安全2. 多进程创建进程进程间通信进程池3. 异步编程使用asyncio库协程和事件循环异步IO4. 并发工具使用queue模块使用threading模块使用multiprocessing模块十、网络爬虫1. 爬虫基础爬取网页内容解析HTML内容模拟浏览器行为2. 数据提取提取网页中的数据数据清洗和存储数据爬取示例3. 反爬虫策略处理IP封禁处理验证码使用代理IP4. 分布式爬虫使用Scrapy框架分布式任务调度分布式爬虫示例十一、机器学习1. 数据预处理数据清洗特征提取数据可视化2. 线性回归线性回归模型模型训练和评估线性回归应用3. 决策树决策树模型模型训练和评估决策树应用4. 支持向量机支持向量机模型模型训练和评估支持向量机应用十二、Web框架1. Django创建Django项目使用Django模型Django视图和模板2. Flask创建Flask应用使用Flask蓝图Flask中间件3. FastAPI创建FastAPI应用使用FastAPI路由FastAPI依赖注入4. Tornado创建Tornado应用使用Tornado异步处理 Tornado模板十三、API开发1. RESTful API设计资源和操作HTTP方法路由设计2. JSON和XML数据格式JSON数据解析XML数据解析数据序列化和反序列化3. API安全认证和授权数据加密API安全测试4. API文档使用Swagger使用RedocAPI文档编写十四、软件工程1. 版本控制使用Git分支管理代码合并和冲突解决2. 代码审查审查流程审查工具代码质量提升3. 代码风格和规范PEP 8编码规范使用代码风格检查工具代码重构4. 项目管理使用Trello使用Jira项目进度跟踪十五、操作系统1. 进程管理进程状态转换进程同步与互斥进程调度算法2. 内存管理内存分配与回收分页和分段虚拟内存3. 文件系统文件和目录操作文件存储结构文件系统性能优化4. 网络协议TCP/IP协议栈套接字编程网络安全协议十六、数据库高级1. MySQL高级特性存储引擎索引优化性能调优2. NoSQL数据库MongoDBRedis数据模型和操作3. 数据库连接池连接池原理连接池配置连接池管理4. 数据库备份与恢复备份策略恢复流程备份恢复工具十七、云计算1. 云服务模型IaaS、PaaS、SaaS 云计算平台云服务提供商2. 虚拟化技术虚拟机容器技术虚拟化原理3. 云存储云存储服务数据备份与恢复云存储性能优化4. 云安全云安全架构数据加密云安全最佳实践十八、网络安全1. 网络攻击类型DDoS攻击SQL注入XSS攻击2. 防火墙和入侵检测系统防火墙规则入侵检测系统安全策略3. 加密技术对称加密非对称加密数字签名4. 安全协议SSL/TLSIPsecSSH十九、移动开发1. Android开发Activity生命周期广播接收器SQLite数据库2. iOS开发ObjectiveCSwiftUIKit框架3. 响应式设计响应式布局媒体查询移动端优化4. 移动端安全应用安全数据安全用户隐私保护1. 机器学习算法神经网络决策树支持向量机2. 深度学习卷积神经网络循环神经网络对抗网络3. 自然语言处理文本分类机器翻译语音识别4. 计算机视觉图像识别目标检测3D重建,二十一、软件测试1. 单元测试框架unittestpytestnose2. 集成测试测试驱动开发测试金字塔测试覆盖率分析3. 性能测试压力测试负载测试性能瓶颈分析4. 安全测试漏洞扫描漏洞利用安全测试报告二十二、版本控制1. Git分支管理分支策略分支合并分支冲突解决2. Subversion(SVN)版本库操作提交和更新修订历史查询3. Gitflow工作流程特定场景下的Git工作流程发布流程维护和开发分支4. 分布式版本控制系统GitLabBitbucketGitHub二十三、项目管理1. 项目计划项目目标设定项目范围定义项目时间表2. 项目监控进度跟踪资源管理风险评估3. 项目沟通团队沟通策略会议管理沟通工具使用4. 项目交付版本发布用户培训二十四、软件架构1. 架构风格微服务架构容器化架构微服务与容器化结合2. 分布式系统设计服务发现负载均衡分布式事务3. 高可用架构数据库复制高可用集群故障转移机制4. 云原生架构Kubernetes服务网格容器编排二十五、前端开发1. HTML/CSSHTML5新特性CSS3动画响应式设计2. JavaScript框架ReactAngularVue.js3. 前端工具链WebpackBabelGulp4. 前端性能优化图片优化CSS优化JavaScript性能分析二十六、后端开发1. RESTful API设计RESTful原则API文档编写API测试2. Web框架比较Django vs FlaskSpring Boot vs Express Ru on Rails vs Laravel 3. 数据库设计ER图设计关系型数据库设计非关系型数据库设计4. 安全设计身份验证和授权数据加密安全漏洞防护答案一、基础语法1. 变量和数据类型定义变量并赋值数据类型转换列表和元组操作2. 控制流条件语句循环语句break和continue语句3. 函数定义和调用函数递归函数默认参数和可变参数4. 模块和包导入模块模块中的函数和变量创建自定义模块二、面向对象编程1. 类和对象创建类和实例化对象类的继承方法重写和多态2. 属性和装饰器属性的getter和setter类装饰器方法装饰器3. 封装和抽象封装原理抽象类和抽象方法抽象基类4. 异常处理tryexcept语句自定义异常异常传播三、文件操作1. 文件读取打开和关闭文件读取文件内容文件读取示例2. 文件写入写入文件内容文件追加文件写入示例3. 文件路径路径操作文件路径示例四、网络编程1. 基础网络TCP/IP协议套接字编程基础网络示例2. HTTP请求发送HTTP请求获取HTTP响应HTTP请求示例3. 请求使用SSL/TLS加密请求示例五、数据结构和算法1. 列表列表操作列表排序列表示例2. 集合集合操作集合示例3. 字典字典操作字典示例4. 排序算法冒泡排序选择排序快速排序5. 查找算法线性查找二分查找哈希表查找六、数据库操作1. SQLite数据库创建数据库和表插入、更新、删除数据查询数据2. MySQL数据库连接MySQL数据库创建表和索引数据操作3. ORM框架使用Django ORM使用FlaskSQLAlchemy ORM示例七、Web开发1. Flask框架创建Flask应用路由和视图模板渲染2. Django框架创建Django项目模型、视图、模板表单处理3. JavaScript和jQuery基础JavaScript语法 jQuery操作DOMAJAX请求八、自动化测试1. 单元测试使用unittest模块编写测试用例测试覆盖率2. 集成测试使用pytest模块编写集成测试用例测试环境配置3. 自动化测试框架使用Selenium使用Robot Framework自动化测试示例九、并发编程1. 多线程创建线程线程同步线程安全2. 多进程创建进程进程间通信进程池3. 异步编程使用asyncio库协程和事件循环异步IO4. 并发工具使用queue模块使用threading模块使用multiprocessing模块十、网络爬虫1. 爬虫基础爬取网页内容解析HTML内容模拟浏览器行为2. 数据提取提取网页中的数据数据清洗和存储数据爬取示例3. 反爬虫策略处理IP封禁处理验证码使用代理IP4. 分布式爬虫使用Scrapy框架分布式任务调度。
Linux操作系统 考试题库

1.在Linux目录结构中目录中的文件是普通用户可以使用的可使用的可执行文件的目录是(B)19A./sbinB./binC./usrD./lib2.在Linux目录结构中Linux的内核及引导程序所需要的文件位于(B)目录A/bin B./boot C./root D./proc3.在Linux目录结构中用来存放系统配置文件(D)目录A./libB./devC./procD./etc4.Linux三种特殊权限中仅用于目录文件的权限是(C)22A.SUIDB.SGIDC.黏滞位D.都可以5.Linux三种权限中允许进入目录的权限(C) 22A.r-可读B.w-可写C.x-可执行D.都不是6.下列脚本文件最先自动执行的是(A)24A./etc/rc.localB./etc/profileC.~/.bashrcD.~/.bash_logout7.下面通配符可匹配多个任意字符的通配符是(A)29A.*B. ?C.[abcde ]D.[!a-e]8.输出重定向符号右边的文件已经存在,不会覆盖文件而是追加的定向符是(B)A.>B.> >C. 2>D.&>9.表示用户家目录的是(B)A./home (所有用户家目录的父目录,+用户名才是用户家目录)B.~C. .D. ..10.可删除非空目录及其子目录的命令是(B)A. touchB.rm -rC.mkdirD.rmdir空目录11. 是强引用的符号(A)A. 单引号B.反引号C.双引号D.中括号12.可显示隐藏文件的ls命令形式选项是(A)A. ls -aB. ls -dC.ls -h D .ls -l13.可通过接受标准输入作为输出内容来创建简单文件的命令是(B)42A.touchB.catC.viD. gedit14.不带有编辑功能但有翻页、按行滚动、搜索功能的命令是(B) 43A.catB.more和lessC.head 和 tail D vi15.wc命令可统计文件的行数、字数和字节数。
嵌入式Linux试题

嵌入式Linux系统基础试题库一.填空题:1. 在Linux系统中,以文件方式访问设备。
2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统。
3. Linux文件系统中每个文件用索引节点来标识。
7. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为:644 ,该文件属性是目录。
8. 前台起动的进程使用Ctrl+c终止。
13. 编写的Shell程序运行前必须赋予该脚本文件执行权限。
16. linux内核分为进程调度、内存管理、虚拟文件系统和网络接口、进程间通信这5个子系统。
19. 唯一标识每一个用户的是用户ID 和用户名。
21. 在Linux系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统。
27. vi编辑器具有三种工作模式:命令模式、输入模式和末行模式。
28. 可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占 1 位,表示文件类型,第二段占3位,表示文件所有者对该文件的权限。
29. 进程与程序的区别在于其动态性,动态的产生和终止,从产生到终止进程可以具有的基本状态为:运行态、就绪态和等待态(阻塞态)。
38 在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是/etc 。
40. 套接字文件的属性位是s ,管道文件的属性位是p。
41. 结束后台进程的命令是kill。
43. Links分为硬链接和符号链接。
44. 在超级用户下显示Linux系统中正在运行的全部进程,应使用的命令及参数是ps -aux 。
46. 将前一个命令的标准输出作为后一个命令的标准输入,称之为管道。
47. 为脚本程序指定执行权的命令及参数是chmod a+x filename 。
52.在Linux系统中,压缩文件后生成后缀为.gz文件的命令是gzip 。
53. 在用vi编辑文件时,将文件内容存入test.txt文件中,应在末行模式下键入:w test.txt。
计算机操作系统应用题及答案

计算机操作系统应用题及答案第一题:假设一个操作系统有4个可供调用的用户进程:P1、P2、P3和P4,并且系统内存可分为4个块:M1、M2、M3和M4。
每个进程的大小分别为24KB、64KB、48KB和32KB。
根据以下要求回答问题:1. 在以下情况下,请给出一个合理的内存布局方案:- 最先适配算法- 最佳适配算法- 最坏适配算法2. 分别计算使用以上算法后的空闲内存空间大小。
答案:1. 最先适配算法:根据进程到达的顺序,将每个进程分配给尺寸最接近的空闲内存块。
根据这一算法,以下是可能的内存布局方案:- M1:P1 (24KB)- M2:P2 (64KB)- M3:P3 (48KB)- M4:P4 (32KB)2. 最先适配算法下的空闲内存空间大小为0KB。
最佳适配算法:根据进程尺寸,将每个进程分配给能满足需求并且所需空间最接近的内存块。
根据这一算法,以下是可能的内存布局方案:- M1:P1 (24KB)- M2:P4 (32KB)- M3:P3 (48KB)- M4:P2 (64KB)2. 最佳适配算法下的空闲内存空间大小为816KB(64KB-48KB)。
最坏适配算法:根据进程尺寸,将每个进程分配给最大的空闲内存块。
根据这一算法,以下是可能的内存布局方案:- M1:P2 (64KB)- M2:P3 (48KB)- M3:P4 (32KB)- M4:P1 (24KB)2. 最坏适配算法下的空闲内存空间大小为28KB(M4内存块,32KB-24KB)。
第二题:假设一个系统有3个进程P1、P2和P3,每个进程的执行时间如下:- P1: 10ms- P2: 20ms- P3: 30ms现在采用时间片轮转调度算法,时间片大小为15ms。
回答以下问题:1. 给出每个进程的执行顺序。
2. 计算每个进程的周转时间和带权周转时间。
答案:1. 进程执行顺序:P1 -> P2 -> P3 -> P1 -> P3 -> P32. 周转时间计算:- P1:10ms + 30ms + 5ms = 45ms (前两个时间片 + 最后一个时间片)- P2:20ms + 10ms = 30ms (一个时间片)- P3:30ms + 15ms + 15ms + 15ms = 75ms (两个时间片 + 一个完整时间片 + 一个不完整时间片)带权周转时间计算:- P1:45ms / 10ms = 4.5- P2:30ms / 20ms = 1.5- P3:75ms / 30ms = 2.5第三题:假设一个文件系统的磁盘块大小为2KB。
操作系统题库-图文

操作系统题库-图文一、填空题1. 操作系统的基本功能包括(存储)管理、(处理机)管理、(文件)管理、(设备)管理以及提供用户接口。
2. 系统调用与一般函数调用的执行方式有着明显的不同,系统调用运行在(系统)态,一般函数调用运行在( 用户)态。
3. 进程并发执行时有间断性、(制约性)和(无封闭性和可再现性)的特点。
4. 进程的基本特征有(动态)、(并发)、独立、异步及结构特征。
5. UNIX系统的文件目录项由两部分构成,即文件名和(目录或路径)6. 临界资源的概念是(不允许多个进程交替、穿插、轮流进行访问的资源),而临界区是指(访问临界资源的那段代码)。
7. 产生死锁的原因可以归结为两点:(资源竞争)和(不可抢占)。
8. 段页式存储管理中,是将作业分(段),(段)内分(页),内存分配以(页面)为单位。
9. 分页存储管理方式中,在不考虑使用快表的情况下,每条访问内存的指令需要( 20两)次访问内存;10. 在操作系统中,不可中断执行的操作称为(原语)作;11. 进程访问临界资源的代码段称为(临界区),为保证进程互斥,应在进程的临界区前设置( P(mutex)),在临界区后设置( V(mutex))。
12.银行家算法中,当一个进程提出的资源请求将导致系统从(安全状态)进入(不安全状态)时,系统就拒绝它的资源请求。
13.页面调入策略要解决(请求页)、(提前页)两个问题。
14.最佳置换算法是选择(永不使用)或(最长时间不再使用)的页面做为被淘汰的页面。
15、采用多道程序设计技术能充分发挥(CPU)与(IO)并行工作的能力。
16、张入缓冲技术的原因是缓和cup和io设备间速度不匹配的矛盾、减少对cpu的中断频率、提高cup和io设备之间的并行性。
17、1.操作系统的五大功能是 CPU管理、存储器管理、I/O管理、文件管理和作业管理。
2.并发和共享是现代操作系统的两个最基本的特征两者之间是互为存在的条件。
linux系统编程试卷(答案)

凌阳教育嵌入式培训系统编程部分测试试题注:考试为闭卷,程序题需上机操作运行出结果,考试时间为120分钟一:选择题(本题共4小题,每题3分共12分)1)下列不是Linux系统进程类型的是( D )A 交互进程B 批处理进程C 守护进程D 就绪进程(进程状态)2)以下对信号的理解不正确的是( B )A 信号是一种异步通信方式B 信号只用在用户空间进程通信,不能和内核空间交互C 信号是可以被屏蔽的D 信号是通过软中断实现的3)进程有三种状态( C )A 准备态、执行态和退出态B 精确态、模糊态和随机态C 运行态、就绪态和等待态D 手工态、自动态和自由态4)不是进程和程序的区别( B)A 程序是一组有序的静态指令,进程是一次程序的执行过程B 程序只能在前台运行,而进程可以在前台或后台运行C 程序可以长期保存,进程是暂时的D 程序没有状态,而进程是有状态的二:填空题(本题共6小题,2)、3)两题每空四分,其余每空一分。
共23分)1) 列举八种常见的进程间通信方式无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字网络上两个主机的进程间通信方式为套接字2) 命名管道比无名管道的优势提供了一个可以访问的路径名,实现没亲缘关系的进程间通信3) 消息队列比命名管道和无名管道的优势可以按类型实现消息的随机查询,没必要先进先出4) 按照逻辑结构不同进行数据库划分,Sqlite 数据库属于哪一类关系型数据库5) 在C语言中操作sqlite数据库,常用的2中方式是sqlite_exec(回调)、sqlite_gettable(非回调)6) 列举四种进程调度算法先来先调度(FCFS)、短进程优先调度(SPF)、高优先级调度(HPF)、时间片轮转调度三:问答题(本题共7题,每题5分,共35分)1) 什么是系统调用?系统调用是通过什么方式陷入内核态的?请写出你对系统调用的理解。
什么是文件I/O和标准I/O库?文件I/O和标准I/O库的区别?系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以通过这组接口获得操作系统内核提供的服务。
unix试题及答案(一

unix试题及答案(一一、单选题(每题1分,共10分)1. Unix系统中,哪个命令用于查看当前目录下的文件和文件夹?A. lsB. pwdC. cdD. mkdir答案:A2. 在Unix中,如何查看当前系统的运行时间和平均负载?A. uptimeB. topC. psD. who答案:A3. Unix系统中,哪个命令用于改变文件的权限?A. chmodB. chownC. chgrpD. chmode答案:A4. 在Unix中,如何查看一个文件的内容而不编辑它?A. viB. catC. editD. view答案:B5. Unix系统中,哪个命令用于搜索文件系统中的文件?A. findB. searchC. locateD. query答案:A6. 在Unix中,如何查看当前目录下的所有文件和文件夹,包括隐藏文件?A. ls -aB. ls -lC. ls -rD. ls -h答案:A7. Unix系统中,哪个命令用于查看当前系统的磁盘使用情况?A. dfB. duC. diskusageD. diskinfo答案:A8. 在Unix中,如何复制一个文件?A. copyB. cpC. duplicateD. clone答案:B9. Unix系统中,哪个命令用于查看当前系统的版本信息?A. versionB. unameC. sysinfoD. osinfo答案:B10. 在Unix中,如何删除一个文件?A. delB. rmC. deleteD. remove答案:B二、多选题(每题2分,共10分)1. Unix系统中,哪些命令用于查看当前路径?A. pwdB. lsC. cdD. path答案:A2. 在Unix中,哪些命令用于查看进程信息?A. psB. topC. jobsD. task答案:A, B3. Unix系统中,哪些命令用于文件权限的修改?A. chmodB. chownC. chgrpD. chmode答案:A, B, C4. 在Unix中,哪些命令用于文件内容的查看?A. catB. lessC. moreD. view答案:A, B, C5. Unix系统中,哪些命令用于文件的复制?A. cpB. copyC. duplicateD. clone答案:A三、判断题(每题1分,共10分)1. Unix系统中,使用“cd ..”命令可以进入上级目录。
Linux编程技术_西安邮电大学中国大学mooc课后章节答案期末考试题库2023年

Linux编程技术_西安邮电大学中国大学mooc课后章节答案期末考试题库2023年1.( )函数可以对已打开的文件描述符进行各种控制操作以改变已打开文件的各种属性。
答案:fcntl2.调用fork函数后,子进程不会拷贝父进程的()?答案:进程ID3.以下哪种信号处理方式不需要提前安装信号处理函数。
答案:按默认方式处理4.以下关于IPC对象的描述正确的是()。
答案:创建IPC对象时,需要约定一个键值,保证通信的多个进程会合在同一个IPC对象上5.以下哪一项不是线程与进程对比的优点?答案:线程拥有更灵活的调度策略6.以下哪种情况不会导致线程被取消?答案:线程处于CANCELED状态,且线程收到了取消信号7.以下关于线程私有数据的说法,错误的是()。
答案:线程的ID号是线程的私有数据8.pthread_cond_wait函数的作用是( )。
答案:等待参数指定的条件变量发出信号9.GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。
答案:正确10.Linux内核版本号由3组数字组成:主版本号.次版本号.次次版本号。
如内核版本4.8.2,4为主版本号,8为次版本号,9为次次版本号。
答案:正确11.根据文件路径来改变文件权限使用的函数是chmod。
答案:正确12.在UNIX/Linux系统中,可以认为操作系统用了三张表来描述一个被进程打开的文件。
答案:正确13.Shell可以管理命令或程序的输入输出。
答案:正确14.SYSTEM V IPC中信号量机制中信号量的P操作和V操作都是通过调用semop函数来实现的。
答案:正确15.使用共享内存的进程在创建或关联了共享内存后,还需要将共享内存绑定到自己的进程空间中。
答案:正确16.同一进程的所有线程共享进程的所有信息,包括堆。
答案:正确17.多个线程申请同一个互斥锁有可能导致系统死锁。
答案:正确18.被初始化的互斥量或条件变量必须使用pthread_mutex_destroy或pthread_cond_destroy函数销毁。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux文件编程函数一简述几个基本知识——1 Linux应用程序编程所用到的函数,主要有两种方式提供:系统调用方式函数库方式2 如何学习这些函数?三步学习法:第一步:借助工具书,查找函数名;《Unix环境高级编程》第二步:在Linux系统中,利用man命令查看函数信息,并填写函数学习手册。
第三步:实践,编写代码。
3 VI概念——文件描述符性质:一个数字特别含义:其功能类似于身份证号码,通过身份证号码,可以将对应的公民;在Linux系统中,每一个打开的文件,都对应一个数字,通过这个唯一的数字,可以找到这个打开的文件,并对其进行操作,比如读、写等。
二首先学习系统调用方式提供的函数——4 学习以下7个函数——打开文件创建文件关闭文件读文件写文件文件定位复制文件描述符5 打开文件——open范例1:打开已经存的文件 open.c#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>void main(){int fd;/*文件描述符*/fd = open("/home/test.c",O_RDWR);if(fd<0)printf("Open file fali!\n");elseprintf("Open file sucessfully!\n");}范例2:利用open函数创建新文件 open_creat.c #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>void main(){int fd;/*文件描述符*/fd = open("/home/test1.c",O_RDWR | O_CREAT,0755);if(fd<0)printf("Open file fali!\n");elseprintf("Open file sucessfully!\n");}6 创建文件——creat在《》一书中,找到函数名利用man creat查找函数的帮助文件编写程序代码——#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>void main(){int fd;fd = creat("/home/test2.c",0621);if(fd<0)printf("create file fail!\n");elseprintf("Create file successfully!\n");}7 在《》一书中,找到函数名man close 查找函数原型编写程序代码close.c#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>void main(){int fd;fd = open("/home/test2.c",O_RDWR | O_CREAT,0755);if(fd<0)printf("create file fail!\n");elseprintf("Create file successfully!\n");int ret;ret = close(fd);if(ret == 0)printf("File has been closed!\n");elseprintf("Fail to close!\n");}8 首先查找一下读文件的函数read()man所查询的是一个手册,首先从章节一里面找关键字,如果没有找到,再到后续章节中找。
man 2 readman 章节一命令章节二系统调用章节三库函数范例:#include <fcntl.h>void main(){int fd;fd = open("/home/test1.c",O_RDWR | O_CREAT,0755);if(fd<0)printf("create file fail!\n");elseprintf("Create file successfully!\n");char buf[10];/*定义一个数组,有10个空间;用来存放读取出的数据*/ssize_t count;count = read(fd,buf,5);/*将读取出的字符存放到buf 指向的空间里面。
*/if(count==-1)printf("Read fail!");elseprintf("Read %d Bytes.\n",count);buf[5]='\0'; /*这样,读取后的内容无乱码字符出现。
*/printf("buf is %s.\n",buf); /*打印字符串*/int ret;ret = close(fd);if(ret == 0)printf("File has been closed!\n");elseprintf("Fail to close!\n");}9 写文件找到写文件对应的函数write()man 2 writewrite.c#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>void main(){int fd;fd = open("/home/test2.c",O_RDWR | O_CREAT,0755);if(fd<0)printf("create file fail!\n");elseprintf("Create file successfully!\n");char *buf = "987654321";ssize_t count;count = write(fd,buf,7);if(count==-1)printf("Write fail!");elseprintf("Write %d Bytes.\n",count);printf("The original buf is %s.\n",buf);int ret;ret = close(fd);if(ret == 0)printf("File has been closed!\n");elseprintf("Fail to close!\n");}10 定位文件lseek()在此之前,先实验一下,能否在文件写入之后,直接读取刚才写入的内容?实验验证,没有读到数据。
这就是我们要给大家介绍的文件读写指针。
当打开文件时,指针位于文件头部,然而,当对文件进行读或者写操作后,文件指针将发生变化。
介绍,如何设置指针的位置。
范例:#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>void main(){int fd;fd = open("/home/test2.c",O_RDWR | O_CREAT,0755);if(fd<0)printf("create file fail!\n");elseprintf("Create file successfully!\n");char *buf = "987654321";ssize_t count;count = write(fd,buf,7);if(count==-1)printf("Write fail!");elseprintf("Write %d Bytes.\n",count);printf("The original buf is %s.\n",buf);off_t ref;ref = lseek(fd,0,SEEK_SET);if(ref==-1)printf("Fail to shift.\n");elseprintf("The distance to file_head is %d Bytes.\n",ref);char buf_r[10];/*定义一个数组,有10个空间;用来存放读取出的数据*/ssize_t count_r;count_r = read(fd,buf_r,5);/*将读取出的字符存放到buf指向的空间里面。
*/if(count_r==-1)printf("Read fail!");elseprintf("Read %d Bytes.\n",count_r);buf_r[5]='\0'; /*这样,读取后的内容无乱码出现。
*/printf("buf_r is %s.\n",buf_r); /*打印读出的字符串*/int ret;ret = close(fd);if(ret == 0)printf("File has been closed!\n");elseprintf("Fail to close!\n");}11 复制文件描述符 dup()可以利用新复制的文件描述符fd_new来操作oldfd所指定的文件。
就好比一个人有两个身份证号码。
/*利用dup()函数复制后的文件描述符不同于原来的,但共同指向同一个文件*/范例:dup.c#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>void main(){int fd;fd = open("/home/test2.c",O_RDWR | O_CREAT,0755);if(fd<0)printf("create file fail!\n");elseprintf("Create file successfully!\n");char *buf = "987654321";ssize_t count;count = write(fd,buf,7);if(count==-1)printf("Write fail!");elseprintf("Write %d Bytes.\n",count);printf("The original buf is %s.\n",buf);off_t ref;ref = lseek(fd,0,SEEK_SET);if(ref==-1)printf("Fail to shift.\n");elseprintf("The distance to file_head is %d Bytes.\n",ref);int newfd;newfd = dup(fd);if(newfd==-1)printf("Fail to copy the old fd.\n");elseprintf("The new fd is %d.\n",newfd);char buf_r[10];/*定义一个数组,有10个空间;用来存放读取出的数据*/ssize_t count_r;count_r = read(newfd,buf_r,5);/*将读取出的字符存放到buf指向的空间里面。