open close write 跟read

本文详细介绍了系统I/O中的关键函数,包括如何使用open、creat、write、read等函数来打开、创建和读写文件。通过实例演示了如何读取文件内容并打印到屏幕上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统I/O  I/O函数

函数 :   int open(const char *pathname, int flags);

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

                int creat(const char *pathname, mode_t mode);

作用:打开一个文件,以不同的flags对文件进行操作,可以达到判断文件是否存在,以及创建等操作。

返回值 :成功则返回相应的文件描述符 文件描述符的作用为给之后的I/O读写等函数做输入参数

                 失败返回 -1


对应函数 int close(int fd) ; 

作用:关闭一个文件描述符。

=========

函数  ssize_t write(int fd, const void *buf, size_t count);

作用:往文件描述符里写数据,没有缓存操作。

返回值:如果写成功则返回写的数据大小,失败则返回-1.


函数  ssize_t read(int fd, void *buf, size_t count);

作用:从文件描述符里读取数据到buff。

返回值:从文件中实际读取的字符量,返回值 为-1时表示出错,返回值为0说明文件读完了

每次读取会记录读到哪里了,所以我们可以用下面的循环来读取整个文件的信息。 

有兴趣可以做个程序,读取某个文件内容,然后把数据打印到屏幕上。


in ret;

while(1){

ret = read(fd,buf,512);

printf("%S",buf);

if(ret == 0){

break;

}

}

### 文件操作中的 `write`、`read` 和 `open` 方法 在编程中,尤其是像 Java 这样的语言里,文件的操作通常涉及读取 (`read`)、写入 (`write`) 和打开/关闭 (`open/close`) 文件的过程。以下是这些方法的具体用法以及它们如何配合使用的说明。 #### 使用 `Files.newInputStream()` 打开文件 为了实现文件的输入流操作,在 Java 中可以利用 `java.nio.file.Files` 类的方法来完成这一目标。具体来说,可以通过调用 `newInputStream(Path path)` 来获取一个用于读取字节数据的输入流对象[^1]: ```java Path filePath = Paths.get("example.txt"); try (InputStream inputStream = Files.newInputStream(filePath)) { int data; while ((data = inputStream.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } ``` 上述代码片段展示了通过 `newInputStream()` 创建了一个基于指定路径的输入流,并逐字符地从该文件中读取内容直到结束为止。 #### 实现文件写入功能 对于文件写入而言,Java 提供了多种方式来进行处理,其中一种常见的方式就是借助于 `FileOutputStream` 或者更高级别的类如 `BufferedWriter` 配合 `Files.newBufferedWriter()` 方法使用。下面是一个简单的例子展示如何向文件追加字符串: ```java Path outputPath = Paths.get("output.txt"); try (BufferedWriter writer = Files.newBufferedWriter(outputPath, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { writer.write("This is an appended line."); writer.newLine(); // Add newline after writing content. } catch (IOException ex) { ex.printStackTrace(); } ``` 这里我们创建了一个缓冲区写出器实例并设置了编码格式为 UTF-8 同时指定了两个选项:如果不存在则创建新文件(`CREATE`);每次运行程序都将文本附加到现有文件末尾而不是覆盖它(`APPEND`)。 #### 关闭资源的重要性 无论何时执行完文件 I/O 操作之后都应当确保及时释放所占用的相关系统资源(比如关闭 InputStream / OutputStream)。现代 Java 推荐采用 try-with-resources 结构自动管理此类生命周期问题,从而减少潜在错误风险。 --- ### 总结 综上所述,无论是基本类型的 byte-level 数据还是更高层次上的 String-based 文本信息交换都可以依靠标准库所提供的工具轻松达成目的。值得注意的是实际开发过程中还需要考虑异常捕获机制以应对可能出现的各种意外状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值