基本情報技術者 2012年 秋期 午前(科目A) 問42
問題文
ファイルの属性情報として、ファイルに対する読取り、書込み、実行の権限を独立に設定できるOSがある。この3種類の権限は、それぞれに1ビットを使って許可、不許可を設定する。この3ビットを8進数表現0〜7の数字で設定するとき、次の試行結果から考えて、適切なものはどれか。
〔試行結果〕
① 0を設定したら、読取り、書込み、実行ができなくなってしまった。
② 3を設定したら、読取りと書込みはできたが、実行ができなかった。
③ 7を設定したら、読取り、書込み、実行ができるようになった。
選択肢
ア:2を設定すると、読取りと実行ができる。
イ:4を設定すると、実行だけができる。(正解)
ウ:5を設定すると、書込みだけができる。
エ:6を設定すると、読取りと書込みができる。
ファイル属性の権限ビットと8進数表現【午前2 解説】
要点まとめ
- 結論:問題の試行結果から、3ビットは実行=4、読取り=2、書込み=1と割り当てられ、4を設定すれば実行のみが可能です。
- 根拠:0は、3は、7はであり、それぞれ「なし」「読取り+書込み」「全て」を表すことから割り当てが決まります。
- 差がつくポイント:8進数を2進数に直し、各ビット(LSB=1, 中位=2, MSB=4)と権限の対応を正確に把握することが重要です。
正解の理由
正解は イ です。
理由は次の通りです。問題の試行結果を2進数に変換すると、
理由は次の通りです。問題の試行結果を2進数に変換すると、
- 0 → (読取・書込・実行のいずれも不可)
- 3 → (下位2ビットが1で、中位・下位が許可) → ここで許可されているのは「読取りと書込み」
- 7 → (全ビット1で全て許可)
3が「読取りと書込み」を意味するので、2進表現の下位から順に「書込み=1、読取り=2、実行=4」と対応づけられます。したがって、値4は実行ビットのみを立てるので「実行だけができる」となり、選択肢イが正しいです。
よくある誤解
- 「UNIX の慣習(読取り=4, 書込み=2, 実行=1)に引きずられる」:問題の割り当ては試行結果に基づいて決めるため、慣習が当てはまらない場合がある点に注意。
- 「8進数の桁とビットの対応を混同する」:ここでは1桁(0〜7)が3ビットを表す単位なので、各桁のビット位置(LSB→中位→MSB)を正しく読むこと。
- 「10進数そのままを権限と誤解する」:8進数の数字は内部的に2進数に変換してビットごとの許可/不許可を判断します。
解法ステップ
- 試行結果の数値を2進数に変換する(0→000、3→011、7→111)。
- 各2進ビットの立ち具合と許可されている権限を照合する(3で許可されているのは上位以外の2ビット)。
- ビット位置に権限を割り当てる(LSB=書込み=1、次=読取り=2、MSB=実行=4)。
- 各選択肢の数を2進数に変換して、どの権限が許可されるか確認する。
選択肢別の誤答解説
- ア: 「2を設定すると、読取りと実行ができる。」
2はで中位ビットのみが1。割り当てでは中位が読取りなので「読取りのみ」であり、読取りと実行ではありません。誤り。 - イ: 「4を設定すると、実行だけができる。」
4はでMSBのみが1。割り当てではMSBが実行なので「実行のみ」が可能であり、正しい。 - ウ: 「5を設定すると、書込みだけができる。」
5はでMSBとLSBが1(実行+書込み)。よって「書込みだけ」ではなく「実行と書込み」が可能であり、誤り。 - エ: 「6を設定すると、読取りと書込みができる。」
6はでMSBと中位が1(実行+読取り)。したがって「読取りと書込み」ではなく「実行と読取り」であり、誤り。
補足コラム
標準的なUNIXパーミッションの表記では「読取り=4, 書込み=2, 実行=1」とすることが多く、そのために混乱しやすいです。本問は試行結果から独自のビット割り当て(書込み=1、読取り=2、実行=4)を導く必要があり、教科書の慣習に頼らず問題の条件から推定する力が求められます。実務では桁(例: 7 5 4 のような3桁)ごとに所有者/グループ/その他を表すことが多い点も覚えておくとよいでしょう。
簡単な確認用 Python スニペット(割り当てを問題通りに仮定)
mapping = {4: "実行", 2: "読取り", 1: "書込み"}
def perms(n):
res = []
for bit,val in [(4,"実行"),(2,"読取り"),(1,"書込み")]:
if n & bit:
res.append(val)
return res
for n in [0,3,4,5,6,7]:
print(n, bin(n)[2:].zfill(3), perms(n))
FAQ
Q. なぜ3が読取り+書込みと分かるのですか?
A. 3を2進数で表すと で下位2ビットが立っています。試行結果ではそれが「読取りと書込み」に対応しているため、各ビットの対応を確定できます。
A. 3を2進数で表すと で下位2ビットが立っています。試行結果ではそれが「読取りと書込み」に対応しているため、各ビットの対応を確定できます。
Q. 問題ではなぜUNIX慣習と違う割り当てになるのですか?
A. 問題は試行結果(観察)を基に割り当てを決める設問です。慣習は参考になりますが、まずは与えられた条件に従って論理的に導くことが必要です。
A. 問題は試行結果(観察)を基に割り当てを決める設問です。慣習は参考になりますが、まずは与えられた条件に従って論理的に導くことが必要です。
Q. 8進数の桁が複数ある場合はどう読むべきですか?
A. 各桁は独立した3ビット(読取・書込・実行)を表します。例えば8進表記の「6」は でその桁について「実行+読取り」を意味します。
A. 各桁は独立した3ビット(読取・書込・実行)を表します。例えば8進表記の「6」は でその桁について「実行+読取り」を意味します。
関連キーワード: ファイル権限、ビット演算、8進数表現、パーミッション、ビットマスク、読み取り、書き込み、実行

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

