📜  锈-输入输出(1)

📅  最后修改于: 2023-12-03 15:12:32.688000             🧑  作者: Mango

Rust 编程语言介绍

简介

Rust 是一种类型安全、并发执行的编程语言,可以在多个平台上使用,包括 Linux、Windows 和 macOS。它是一种系统级编程语言,特别适用于高性能、安全和并发性的编写。Rust 类型系统具有内存安全和所有权模型,可以避免出现空指针异常和数据竞争等问题。

特点
  • 性能:Rust 可以与 C 和 C++ 一样提供出色的性能,但是更加安全。
  • 安全:Rust 的所有权模型和借用检查器可以确保在编译时发现常见的内存安全问题,例如缓冲区溢出和空指针引用等。它还可以检测并发问题,例如数据竞争。
  • 并发性:Rust 具有内置的并发原语和轻量级线程(称为“任务”),可以方便地编写并发程序。
  • 库:Rust 生态系统中有许多优秀的第三方库,涵盖各种应用场景。
  • 类型推断:Rust 具有类型推断功能,使编写代码更加快速和简便。
输入输出

Rust 的标准库提供了与输入输出相关的模块和函数,包括文件读写、标准输入/输出和网络编程等。下面是一些常用的输入输出函数和示例。

标准输入输出

使用标准输入输出模块(std::io)处理命令行输入和输出。下面是一个简单的示例程序,从标准输入读取字符串并输出它:

use std::io;

fn main() {
    let mut input = String::new();
    println!("Please input a string:");
    io::stdin().read_line(&mut input).expect("Failed to read line");
    println!("Your input is: {}", input.trim());
}

在此代码中,首先创建一个空字符串 input 来存储用户输入。然后使用 println! 宏输出提示信息。io::stdin().read_line(&mut input) 用于读取一行输入,并将其写入 input 中。最后使用 println! 宏输出输入字符串。

说明: 使用 expect 方法用于处理可能出现的错误,并提供有用的错误信息。

文件读写

Rust 的标准库提供了许多文件读写功能,包括文件创建、打开、读取和写入等。下面是一个示例程序,从文件读取字符串并写入到另一个文件中:

use std::fs::File;
use std::io::{BufRead, BufReader, Write};

fn main() {
    let f_in = File::open("input.txt").unwrap();
    let f_out = File::create("output.txt").unwrap();
    let mut reader = BufReader::new(f_in);
    let mut writer = std::io::LineWriter::new(f_out);
    let mut line = String::new();
    while let Ok(n) = reader.read_line(&mut line) {
        if n == 0 {
            break;
        }
        writer.write_all(line.as_bytes()).unwrap();
        line.clear();
    }
}

在此程序中,首先打开输入文件 input.txt 和输出文件 output.txt,并创建包含它们的 File 对象。然后使用 BufReader 读取输入文件,并使用 LineWriter 写入输出文件。最后,使用 read_line 方法逐行读取输入文件中的内容,使用 write_all 方法将其写入输出文件中。程序使用 unwrap 方法处理可能出现的错误。

命令行参数

Rust 的标准库提供了 std::env 模块来获取命令行参数。下面是一个示例程序,展示如何获取命令行参数并使用它们:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() < 2 {
        println!("Usage: ./program <filename>");
        return;
    }
    let filename = &args[1];
    println!("Opening file: {}", filename);
    // ...
}

在本示例中,首先使用 env::args 函数获取所有命令行参数,并使用 collect 方法将它们存储在一个 Vec 向量 args 中。程序会检查向量长度是否等于 2。如果长度小于 2,则程序会输出用法信息并退出。否则,它会提取文件名并输出文件名信息。