Zstd: Perbedaan antara gzip dan zstd

Dibuat pada 19 Sep 2017  ·  4Komentar  ·  Sumber: facebook/zstd

zstd di Linux: dua pengamatan

1) Jika saya memulai gzip untuk mengompres file besar dan jika saya mematikan gzip menggunakan ^ C, gzip akan menghapus file keluaran sebelum menghentikannya. zstd saat ini tidak melakukan itu. Saya pikir perilaku gzip lebih baik, karena lebih baik tidak memiliki file keluaran daripada memiliki file keluaran yang tidak lengkap atau rusak.

2) Saat mengompresi atau mendekompresi file, zstd menggunakan panggilan sistem di bawah ini untuk membuat file output (dari strace):
open("file.zst", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
gzip dan xz menggunakan panggilan sistem yang serupa, tetapi mereka menggunakan mode 0600. Mereka mengalihkan mode file keluaran ke mode yang diinginkan setelah file ditutup. Adakah alasan mengapa zstd menggunakan 0666? Saya pikir 0600 akan lebih baik: jangan izinkan akses baca ke pengguna lain sebelum file siap.

feature request question

Semua 4 komentar

  1. menjebak peristiwa ^C membutuhkan penangan sinyal. Saya belum memeriksanya. Saya juga khawatir dengan masalah portabilitas.

  2. Jejak Anda lebih tepat daripada kode kami.
    Panggilan untuk membuka file tujuan ada di sini:
    https://github.com/facebook/zstd/blob/dev/programs/fileio.c#L324
    Ini hanya standar fopen("name", "wb"); , kami tidak mengontrol sedikit pun properti.
    Kebetulan menerjemahkan ke dalam jejak ini di sistem Anda, ketahuilah bahwa kami tidak memiliki kendali atasnya.
    Secara umum, kami mencoba untuk tetap sedekat mungkin dengan standar C, untuk alasan portabilitas (dan mengurangi sakit kepala ketergantungan).

Pertama-tama: terima kasih telah menulis zstd. Saya kagum dengan kecepatan dan rasio kompresi! Sangat bagus!

Silakan menutup tiket ini. Dua pengamatan saya hanyalah masalah kecil dan tidak masalah jika Anda memutuskan untuk tidak melakukan apa pun.

  1. Saya setuju bahwa menjebak ^ C membutuhkan penangan sinyal.
  2. Menarik. Saya melihat kode sumber xz dan mereka membuka file output dengan kode di bawah ini:
      int flags = O_WRONLY | O_BINARY | O_NOCTTY | O_CREAT | O_EXCL;
      #ifndef TUKLIB_DOSLIKE
          flags |= O_NONBLOCK;
      #endif
      const mode_t mode = S_IRUSR | S_IWUSR;
      dest_fd = open( dest_name, flags, mode );

Mereka menggunakan open () daripada fopen () - dan dengan demikian dapat mengontrol bit izin dari file output.

Benar, saya yakin xz menargetkan sistem yang sesuai dengan POSIX ,
oleh karena itu ia dapat dengan bebas menggunakan perpustakaan posix , dengan biaya tidak kompatibel dengan sistem non-posix atau memerlukan pembungkus khusus (teringat Windows).

zstd mencoba menjadi standar-C sebanyak mungkin, untuk meningkatkan perspektif portabilitas.

Secara teknis, kami juga terkadang menggunakan beberapa antarmuka yang bergantung pada OS, ketika tidak ada standar-C yang setara. Dalam kasus seperti itu, kami mencoba menulis beberapa varian untuk mendukung beberapa target, dan untuk yang tidak didukung, fungsi yang relevan dinonaktifkan dengan bersih (cenderung tidak penting).

Setelah mempelajari lebih lanjut, tampaknya function signal() sebenarnya adalah bagian dari standar C , yang membuatnya cukup portabel.

Dalam pembaruan cabang dev terbaru, saya menambahkan Ctrl-C trapping ke zstd cli.
Saat menekan Ctrl-C , itu sekarang menghapus artefak operasi (file tujuan yang belum selesai) sebelum keluar.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat