CodeBlanks Logo Icon CodeBlanks

tokio::fs

tokio::fs ile asenkron dosya I/O yapmayı öğrenirsin.

tokio::fs

tokio::fs, std::fs ile aynı adlara sahip asenkron fonksiyonlar sunar. Arka planda işlemleri ayrı bir iş parçacığı havuzunda yürütür, böylece görev zamanlayıcı bloke olmaz:

use tokio::fs;

fs::write("selam.txt", "merhaba").await?;
let icerik = fs::read_to_string("selam.txt").await?;
println!("{} bayt", icerik.len());

Çok sayıda küçük dosya işlemi için std'yi spawn_blocking içinde toplu çağırmak çoğu zaman daha hızlıdır.

std ile aynı işlem

Alıştırmada aynı adımları std ile yapıyoruz; API'lerin birebir aynı olması, kodu async'e geçirmeyi kolaylaştırır:

use std::{env, fs, io};

fn main() -> io::Result<()> {
    let yol = env::temp_dir().join("selam.txt");
    fs::write(&yol, "merhaba")?;
    let icerik = fs::read_to_string(&yol)?;
    println!("{} bayt", icerik.len());
    Ok(())
}

Uygulama Yaz ve oku

main io::Result<()> döndürsün. Geçici klasörde selam.txt dosyasına "merhaba" yaz, geri oku ve N bayt yazdır.

Başlangıç kodu

main.rs
use std::{env, fs, io};

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
use std::{env, fs, io};

fn main() -> io::Result<()> {
    let yol = env::temp_dir().join("selam.txt");
    fs::write(&yol, "merhaba")?;
    let icerik = fs::read_to_string(&yol)?;
    println!("{} bayt", icerik.len());
    Ok(())
}

Beklenen çıktı

7 bayt

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Neden işletim sistemi dosya G/Ç'si için gerçek asenkron arayüz sunmaz (çoğu platformda)?

  • Rust desteklemez
  • Gerek yoktur
  • Klasik dosya çağrıları bloke edicidir; tokio bunları thread havuzunda çalıştırır Doğru cevap
  • Dosyalar çok küçüktür

Açıklama: Ağ soketleri epoll/kqueue ile gerçekten bloke olmadan beklenir; dosyalar için io_uring gibi yeni arayüzler vardır.

2 Asenkron okuma

Soru
let icerik = tokio::fs::read_to_string("selam.txt").____?;
Cevap
let icerik = tokio::fs::read_to_string("selam.txt").await?;

Açıklama: tokio::fs fonksiyonları Future döndürür; .await ile beklenir.

3 std ve tokio karşılığı

Kavram Anlamı
std::fs::write tokio::fs::write(..).await
std::thread::sleep tokio::time::sleep(..).await
std::net::TcpListener tokio::net::TcpListener
thread::spawn tokio::spawn

İleri seviye bölümündeki tüm dersler