1

[実行中のアプリケーションの] セッション間で状態を維持するさまざまな方法を調査しています。

[#ubuntu IRC チャットから] 私に提案された [移植性のない] 方法の 1 つは、以下を利用することでしたman xattr

拡張属性は、プロセスに関連付けられた環境文字列と同様に、ファイルとディレクトリに永続的に関連付けられた名前:値のペアです。

ソースコード: https://github.com/torvalds/linux/blob/master/fs/xattr.c

これを機能させることができれば、これは私にとって非常に便利です。私はACやカーネル開発者ではありませんが、キーと値のペアをファイルにマッピングする方法を完全に解析することはできません.

私がこれまでに持っているもの:

#include <QApplication>
#include <QTextStream>
#include <stdio.h>
#include <sys/xattr.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    char key[] = "foo";
    char val[] = "bar";
    char dir[] = "/home/akiva/foobar.txt";
    ssize_t set = setxattr (dir, key, val, strlen(val), 0); // Returns -1[error]
    ssize_t get = listxattr(dir, key,      strlen(val)   ); // Returns  0
    QTextStream(stdout) << QString("SetError: %1 \n"
                                   "GetError: %2 \n"
                                   "     Key: %3 \n"
                                   "     Val: %4 \n").arg(set).arg(get).arg(key).arg(val);

    return a.exec();
}

なぜsetxattrエラーが発生するのか、何を期待すべきなのか、listxattr正常に機能しているように見えるのかわかりません。ファイルのペアをset作成できるようにしたいです。この場合、. その後、設定した後、次のようにファイルから値を取得できるようにしたいと思います。key:valuefoobar.txt"foo":"bar"/home/akiva/foobar.txt

FileClass fc("/home/akiva/foobar.txt"); // A class I will make, similar to QMap
{
        fc.insert("foo", "bar");
        fc.insert("bow", "tie");
}
QString s   = fc["foo"];          // s == "bar"
bool hasFoo = fc.contains("foo"); // true
bool hasDoo = fc.contains("doo"); // false
QStringList keys = fc.keys  ();   // "foo", "bow"
QStringList vals = fc.values();   // "bar", "tie"

クラス内では、すべての制限などを処理します。いずれにせよ、ファイルからキーと値のペアを設定および取得できるという実際の例を取得したいのですが、どこにも単一の例が見つかりません。

  • setを使用してファイルへの Key:Value ペアを作成するにはどうすればよいxattrですか?
  • getを使用してファイルから Key:Value ペアを取得するにはどうすればよいxattrですか?
  • 通常、ファイルには既存の拡張属性がありますか?
4

0 に答える 0