0

C関数を使用したtmplinuxの使用法について質問があります

  • Cでtmpの空き領域サイズを取得する方法(tmpがtmpfsパーティションでない場合)?

  • Cでいっぱいになったときに安全な方法でtmpメモリをクリーンアップする方法は?

ノート:

  • 「df-h」はtmpフォルダーを表示しないため、tmp用のパーティションはありません。

  • proc/meminfoにはメモリ情報が含まれています。ファイルをtmpフォルダーにコピーすると、コピーされたファイルのサイズに応じて/ proc/meminfoのMemFree変数が減少することに注意してください。

4

3 に答える 3

1

一般/tmpに、ローカルパーティション上のファイルシステムへのマウントです。多くの場合、へのリンク/var/tmpです。

詳細については、こちらをご覧ください

その内容はいつでも削除される可能性があります。少なくともシステムの起動時にクリーンアップするのが一般的な動作です。


tmpfs通常、RAMディスクと同様に、SHM(共有メモリ)に常駐するファイルシステムです。

私はウィキペディアから引用するかもしれません:

tmpfsは、多くのUnixライクなオペレーティングシステムでの一時ファイルストレージ機能の一般名です。マウントされたファイルシステムとして表示されることを目的としていますが、永続ストレージデバイスではなく揮発性メモリに保存されます。同様の構造はRAMディスクであり、仮想ディスクドライブとして表示され、ディスクファイルシステムをホストします。

于 2012-05-07T16:32:47.210 に答える
0

ramfs/tmpfs パーティションは動的に拡大することに注意してください。プログラムは、物理 RAM の量よりも多くのデータを書き込まないようにする必要があります。

dfとしてマウントされたパーティションが表示されない場合/tmp/(ルート パーティション) にそのパーティションが含まれ、そのサイズはユーザー/tmpが占有できる最大サイズです。

tmpfs次のようにマウントされているとします。

# mount -t tmpfs -o size=100m tmpfs /mnt/tmp

次を使用してサイズを確認できますdf

# df -k
Filesystem      1K-blocks  Used     Available Use%  Mounted on
tmpfs           102400     0        102400    0%    /mnt/tmp

これらのブロック情報を取得するには、statvfsを使用できます。例:

#include <stdio.h>
#include <stdlib.h>
#include <sys/statvfs.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <device>\n", argv[0]);
        return EXIT_FAILURE;
    }

    struct statvfs fsdata;
    int result = statvfs(argv[1], &fsdata);
    if (result != 0) {
        fprintf(stderr, "Failed to stat: %s\n", argv[1]);
        return EXIT_FAILURE;
    }

    printf("Disk %s:\n", argv[1]);
    printf("  file system block size: %lu\n", fsdata.f_bsize);
    printf("  fragment size: %lu\n", fsdata.f_frsize);
    printf("  size of fs in f_frsize units: %d\n", fsdata.f_blocks);
    printf("  # free blocks: %d\n", fsdata.f_bfree);
    printf("  # free blocks for unprivileged users: %d\n", fsdata.f_bavail);
    printf("  # inodes: %d\n", fsdata.f_files);
    printf("  # free inodes: %d\n", fsdata.f_ffree);
    printf("  # free inodes for unprivileged users: %d\n", fsdata.f_favail);
    printf("  file system ID: %lu\n", fsdata.f_fsid);
    printf("  mount flags: %lu\n", fsdata.f_flag);
    printf("  maximum filename length: %lu\n", fsdata.f_namemax);

    return EXIT_SUCCESS;
}

/tmpパーティションがマウントされている間は、パーティションを安全に消去できません。アンマウントする必要があります。これには、このパーティション内のinode を参照するすべてのファイル記述子を閉じる必要があります。

于 2012-05-07T16:38:58.663 に答える
0

Linux ディストリビューションには 2 種類の /tmp があると思います。これは単にもう 1 つのフォルダーまたは tmpfs パーティション (RAM からのディスク) です。

于 2012-05-07T16:06:43.110 に答える