Class: File

Inherits:
Object
  • Object
show all
Defined in:
ext/extattr.c

Overview

File クラスに拡張属性を操作するメソッドを追加します。

感嘆符(『!』)のついたメソッドは、シンボリックリンクに対する操作となります。

メソッドにキーワード引数として namespace: を与えることにより、拡張属性の名前空間を指定することが出来ます。 現在の実装においては EXTATTR_NAMESPACE_USEREXTATTR_NAMESPACE_SYSTEM のみが利用可能です。

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extattr_delete(argv[], file) ⇒ Object

File.extattr_delete(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil



279
280
281
282
283
284
285
286
287
# File 'ext/extattr.c', line 279

static VALUE
file_s_extattr_delete(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, opts = Qnil;
    rb_scan_args(argc, argv, "2:", &path, &name, &opts);
    return file_s_extattr_delete0(StringValue(path),
                                  NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                  StringValue(name));
}

.extattr_delete!(argv[], file) ⇒ Object

File.extattr_delete!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil



293
294
295
296
297
298
299
300
301
# File 'ext/extattr.c', line 293

static VALUE
file_s_extattr_delete_link(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, opts = Qnil;
    rb_scan_args(argc, argv, "2:", &path, &name, &opts);
    return file_s_extattr_delete_link0(StringValue(path),
                                       NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                       StringValue(name));
}

.extattr_get(argv[], file) ⇒ Object

File.extattr_get(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> data



190
191
192
193
194
195
196
197
198
# File 'ext/extattr.c', line 190

static VALUE
file_s_extattr_get(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, opts = Qnil;
    rb_scan_args(argc, argv, "2:", &path, &name, &opts);
    return file_s_extattr_get0(StringValue(path),
                               NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                               StringValue(name));
}

.extattr_get!(argv[], file) ⇒ Object

File.extattr_get!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> data



204
205
206
207
208
209
210
211
212
# File 'ext/extattr.c', line 204

static VALUE
file_s_extattr_get_link(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, opts = Qnil;
    rb_scan_args(argc, argv, "2:", &path, &name, &opts);
    return file_s_extattr_get_link0(StringValue(path),
                                    NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                    StringValue(name));
}

.extattr_list(argv[], file) ⇒ Object

File.extattr_list(path, namespace: File::EXTATTR_NAMESPACE_USER) -> names array File.extattr_list(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name| … } -> nil

ファイル名を指定すること以外は File#extattr_list と同じです。



101
102
103
104
105
106
107
108
# File 'ext/extattr.c', line 101

static VALUE
file_s_extattr_list(int argc, VALUE argv[], VALUE file)
{
    VALUE path, opts = Qnil;
    rb_scan_args(argc, argv, "1:", &path, &opts);
    return file_s_extattr_list0(StringValue(path),
                                NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))));
}

.extattr_list!(argv[], file) ⇒ Object

File.extattr_list!(path, namespace: File::EXTATTR_NAMESPACE_USER) -> names array File.extattr_list!(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name| … } -> nil

シンボリックリンクに対する操作という以外は、File.extattr_list と同じです。



117
118
119
120
121
122
123
124
# File 'ext/extattr.c', line 117

static VALUE
file_s_extattr_list_link(int argc, VALUE argv[], VALUE file)
{
    VALUE path, opts = Qnil;
    rb_scan_args(argc, argv, "1:", &path, &opts);
    return file_s_extattr_list_link0(StringValue(path),
                                     NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))));
}

.extattr_set(argv[], file) ⇒ Object

File.extattr_set(path, name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil



234
235
236
237
238
239
240
241
242
243
# File 'ext/extattr.c', line 234

static VALUE
file_s_extattr_set(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, data, opts = Qnil;
    rb_scan_args(argc, argv, "21:", &path, &name, &data, &opts);
    return file_s_extattr_set0(StringValue(path),
                               NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                               StringValue(name),
                               StringValue(data));
}

.extattr_set!(argv[], file) ⇒ Object

File.extattr_set!(path, name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil



249
250
251
252
253
254
255
256
257
258
# File 'ext/extattr.c', line 249

static VALUE
file_s_extattr_set_link(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, data, opts = Qnil;
    rb_scan_args(argc, argv, "21:", &path, &name, &data, &opts);
    return file_s_extattr_set_link0(StringValue(path),
                                    NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                    StringValue(name),
                                    StringValue(data));
}

.extattr_size(argv[], file) ⇒ Object

File.extattr_size(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> size



147
148
149
150
151
152
153
154
155
# File 'ext/extattr.c', line 147

static VALUE
file_s_extattr_size(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, opts = Qnil;
    rb_scan_args(argc, argv, "2:", &path, &name, &opts);
    return file_s_extattr_size0(StringValue(path),
                                NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                StringValue(name));
}

.extattr_size!(argv[], file) ⇒ Object

File.extattr_size!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> size



161
162
163
164
165
166
167
168
169
# File 'ext/extattr.c', line 161

static VALUE
file_s_extattr_size_link(int argc, VALUE argv[], VALUE file)
{
    VALUE path, name, opts = Qnil;
    rb_scan_args(argc, argv, "2:", &path, &name, &opts);
    return file_s_extattr_size_link0(StringValue(path),
                                     NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                     StringValue(name));
}

Instance Method Details

#extattr_delete(argv[], file) ⇒ Object

file.extattr_delete(name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil



265
266
267
268
269
270
271
272
273
# File 'ext/extattr.c', line 265

static VALUE
file_extattr_delete(int argc, VALUE argv[], VALUE file)
{
    VALUE name, opts = Qnil;
    rb_scan_args(argc, argv, "1:", &name, &opts);
    return file_extattr_delete0(file, file2fd(file),
                                NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                                StringValue(name));
}

#extattr_get(argv[], file) ⇒ Object

file.extattr_get(name, namespace: File::EXTATTR_NAMESPACE_USER) -> data



176
177
178
179
180
181
182
183
184
# File 'ext/extattr.c', line 176

static VALUE
file_extattr_get(int argc, VALUE argv[], VALUE file)
{
    VALUE name, opts = Qnil;
    rb_scan_args(argc, argv, "1:", &name, &opts);
    return file_extattr_get0(file, file2fd(file),
                             NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                             StringValue(name));
}

#extattr_list(argv[], file) ⇒ Object

file.extattr_list(namespace: File::EXTATTR_NAMESPACE_USER) -> names array file.extattr_list(namespace: File::EXTATTR_NAMESPACE_USER) { |name| … } -> nil

開いているファイルの拡張属性名一覧を得ます。

ブロックが指定された場合、一つ一つの拡張属性名を渡してブロックが評価されます。ブロックの戻り値は無視されます。



85
86
87
88
89
90
91
92
# File 'ext/extattr.c', line 85

static VALUE
file_extattr_list(int argc, VALUE argv[], VALUE file)
{
    VALUE opts = Qnil;
    rb_scan_args(argc, argv, "0:", &opts);
    return file_extattr_list0(file, file2fd(file),
                              NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))));
}

#extattr_set(argv[], file) ⇒ Object

file.extattr_set(name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil



219
220
221
222
223
224
225
226
227
228
# File 'ext/extattr.c', line 219

static VALUE
file_extattr_set(int argc, VALUE argv[], VALUE file)
{
    VALUE name, data, opts = Qnil;
    rb_scan_args(argc, argv, "11:", &name, &data, &opts);
    return file_extattr_set0(file, file2fd(file),
                             NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                             StringValue(name),
                             StringValue(data));
}

#extattr_size(argv[], file) ⇒ Object

file.extattr_size(name, namespace: File::EXTATTR_NAMESPACE_USER) -> names array

拡張属性の大きさを取得します。



133
134
135
136
137
138
139
140
141
# File 'ext/extattr.c', line 133

static VALUE
file_extattr_size(int argc, VALUE argv[], VALUE file)
{
    VALUE name, opts = Qnil;
    rb_scan_args(argc, argv, "1:", &name, &opts);
    return file_extattr_size0(file, file2fd(file),
                              NUM2INT(hash_lookup(opts, SYMnamespace, INT2NUM(EXTATTR_NAMESPACE_USER))),
                              StringValue(name));
}