Linux操作系统实验四 文件管理(二)(下)

简介: Linux操作系统实验四 文件管理(二)(下)

任务描述

在Linux系统中,如果要对一个文件进行操作,操作前需要将这个文件打开。这样才能实现对该文件的操作。

本关任务:学会使用C语言在Linux系统中打开与关闭文件操作。

相关知识

文件的打开与关闭操作是 I/O 操作的第二步。在Linux系统中提供了以下两个系统调用函数用于打开和关闭文件操作,分别是openclose。本关将介绍文件的打开和关闭函数的使用方法。

使用man 2 函数名也可以查询这些函数的使用方法。

文件的打开

打开文件的系统调用函数是open,具体的说明如下:

  • 需要的头文件如下:
  • i. #include <sys/types.h>
  • ii. #include <sys/stat.h>
  • iii. #include <fcntl.h>
  • 函数格式如下:

int open(coust char *pathname, int flags);

int open(const char *pathname, int flags, made_t mode);

参数说明:

pathname:需要被打开或创建的文件绝对路径名或相对路径名;

flags:用于描述文件的打开方式;

mode:用于指定所创建文件的权限(与上一关中creat函数中mode取值一致);

第一个open函数用于打开已经存在的文件。而第二个open函数可以创建一个不存在的文件且打开,该函数将flags参数设置为O_CREAT | O_WRONLY | O_TRUNC时等同于上一关中的creat函数。

常见的flags取值及其含义见下表所示:

函数返回值说明: 调用成功时,返回值为 文件的描述符(大于0的整数);调用失败时,返回值为-1并设置错误编号errno

文件的关闭

关闭文件的系统调用函数是close,具体的说明如下:

  • 需要的头文件如下:
  • i. #include <unistd.h>
  • 函数格式如下: int close(int fd);

参数说明:

  1. fd:需关闭文件的描述符;
  • 函数返回值说明: 调用成功时,返回值为 0;调用失败时,返回值为-1,并设置错误编号errno

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全open_File函数,使其以读方式打开一个文件,并返回文件描述符fd
  • 补全close_File函数,使其关闭一个已经被打开的文件。

任务描述

通过上一关的学习,我们学会了如何使用C语言来打开和关闭文件,本关将继续介绍对文件的读写操作。

本关任务:学会使用C语言在Linux系统中对文件进行读写操作。

相关知识

文件的读写是 I/O 操作的核心内容。上一关中已经介绍了如何打开和关闭一个文件,但是要实现文件的 I/O 操作就必须对其进行读写,文件的读写操作所用的系统调用分别是readwrite。本关将介绍文件的读写函数的使用方法。

使用man 2 函数名也可以查询这些函数的使用方法。

文件的写操作

写入文件的系统调用函数是write,具体的说明如下:

  • 需要的头文件如下:
  • i. #include <unistd.h>
  • 函数格式如下: ssize_t write(int fd, void *buf, size_t count);

参数说明:

  1. fd:表示将对之进行写操作的文件打开时返回的文件描述符;
  2. buf:指向存放将写入文件的数据的缓冲区的指针;
  3. count:表示本次操作所要写入文件的数据的字节数;
  • 函数返回值说明: 调用成功时,返回值为所写入的字节数;调用失败时,返回值为-1并设置错误编号errno
文件的读操作

读取文件的系统调用函数是read,具体的说明如下:

  • 需要的头文件如下:
  • i. #include <unistd.h>
  • 函数格式如下: ssize_t read(int fd, void *buf, size_t count);

参数说明:

  1. fd:表示将对之进行写操作的文件打开时返回的文件描述符;
  2. buf:指向存放所读数据的缓冲区的指针;
  3. count:读操作希望读取的字节数;
  • 函数返回值说明: 调用成功时,返回值为本次读操作实际读取的字节数;调用失败时,返回值为-1并设置错误编号errno

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全write_File函数,完成向文件写入字符串功能。并返回实际写入字符个数。
  • 补全readLine函数,完成从文件中读取一行的功能(不包括换行符),并返回实际读取的字符个数(文件的换行符号为\n)。

任务描述

通过前三关的学习,我们学会了如何使用C语言来创建、打开/关闭和读写文件,本关将介绍如何删除一个已经存在的文件。

本关任务:学会使用C语言在Linux系统中删除文件操作。

相关知识

当不需要一个文件时,我们通常直接选中文件按下delete键对其删除,本关将介绍如何在Linux系统中使用C语言删除一个已经存在的文件。

在Linux系统中使用unlinkremove系统调用可以实现对文件的删除操作。

使用man 2 函数名或者man 3 函数名也可以查询这些函数的使用方法。

使用unlink函数删除文件

删除文件的系统调用函数是unlink,具体的说明如下:

  • 需要的头文件如下:
  • i. #include <unistd.h>
  • 函数格式如下: int unlink(const char *pathname); 参数说明:
  • i. pathname:需要删除的文件绝对路径名或相对路径名;
  • 函数返回值说明: 调用成功时,返回值为0;调用失败时,返回值为-1并设置错误编号errno
使用unlink函数删除文件

remove是删除文件的另一个函数,该函数是C语言的库函数,其本质是通过调用系统调用unlink来完成文件的删除操作,具体的说明如下:

  • 需要的头文件如下:
  • i. #include <stdio.h>
  • 函数格式如下: int remove(const char *pathname); 参数说明:
  • i. pathname:需要删除的文件绝对路径名或相对路径名;
  • 函数返回值说明: 调用成功时,返回值为0;调用失败时,返回值为-1并设置错误编号errno

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 删除当前目录下的testFile文件。
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
5天前
|
安全 Linux 数据安全/隐私保护
探索Linux操作系统的文件权限管理
【9月更文挑战第29天】在数字世界中,文件权限管理如同保护我们隐私的锁。本文将带你了解如何在Linux系统中设置和管理文件权限,确保你的数据安全。我们将一起学习如何通过命令行工具来控制文件访问,就像学习一门新语言一样有趣。准备好了吗?让我们一起开启这场技术之旅!
|
23天前
|
存储 安全 Linux
探索Linux操作系统的心脏:内核
在这篇文章中,我们将深入探讨Linux操作系统的核心—内核。通过简单易懂的语言和比喻,我们会发现内核是如何像心脏一样为系统提供动力,处理数据,并保持一切顺畅运行。从文件系统的管理到进程调度,再到设备驱动,我们将一探究竟,看看内核是怎样支撑起整个操作系统的大厦。无论你是计算机新手还是资深用户,这篇文章都将带你领略Linux内核的魅力,让你对这台复杂机器的内部运作有一个清晰的认识。
52 3
|
23天前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
21天前
|
存储 监控 安全
探究Linux操作系统的进程管理机制及其优化策略
本文旨在深入探讨Linux操作系统中的进程管理机制,包括进程调度、内存管理以及I/O管理等核心内容。通过对这些关键组件的分析,我们将揭示它们如何共同工作以提供稳定、高效的计算环境,并讨论可能的优化策略。
22 0
|
1月前
|
存储 自然语言处理 搜索推荐
探索OS Copilot——那款让你瞬间变身超级用户、编程如呼吸般自然、文件管理如同魔法般的神奇操作系统辅助神器!
【9月更文挑战第4天】“OS Copilot”是一款高效的操作系统辅助软件,通过智能化手段简化电脑使用,涵盖智能命令建议、代码片段生成、文件管理及任务自动化等强大功能。其简洁的界面与友好的用户体验使其成为提升生产力的理想选择,无论是专业人士还是普通用户都能从中受益。从安装到实际应用都非常流畅,能显著提升工作效率,是优化数字生活的得力助手。
34 0
|
1月前
|
Linux
linux内核 —— 读写信号量实验
linux内核 —— 读写信号量实验
|
2月前
|
网络协议 Linux Shell
探索Linux操作系统:从基础到高级编程
【8月更文挑战第31天】本文旨在为读者提供一条清晰的路径,从Linux操作系统的基础知识出发,逐步深入到高级编程技巧。我们将一起揭开Linux神秘的面纱,了解其内部工作原理,并通过实际代码示例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你带来新的视角和技能提升。
|
2月前
|
Linux
探索Linux操作系统:命令行与脚本编程基础
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段旅程,深入探索Linux操作系统的奥秘。通过学习命令行的使用和编写简单的脚本,你将能够更高效地与你的计算机进行交流。无论你是新手还是有经验的用户,本文都将为你打开一扇通往Linux世界的大门。准备好了吗?让我们开始吧!
|
5月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
103 0
|
5月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
112 0
下一篇
无影云桌面