VIS(3) | Library Functions Manual | VIS(3) |
名前¶
vis
—
文字を表示可能文字にエンコードする
書式¶
#include <vis.h>
char *
vis
(char
*dst, char c, int flag,
char nextc) int
strvis
(char *dst,
char *src, int flag)
int
strvisx
(char *dst,
char *src, int len,
int flag)
説明¶
vis
()
関数は、文字 c
を表現する文字列を
dst
にコピーする。
c
をエンコードする必要がない場合、変更せずにコピーされる。
文字列は NUL
文字で終端され、文字列の最後の文字へのポインタが返される。
エンコードされた文字の最大長は
4 文字である (最後の
NUL 文字
は含まない)。
よって、複数の文字をバッファにエンコードする場合、
バッファの大きさは「エンコードされる文字の数の
4 倍 + 最後の NUL
文字
のための 1
文字」でなければならない。
引き数 flag
は、エンコードまたは表示可能文字に変更される文字の
デフォルトの範囲を変更する。
その他の文字 nextc
は、エンコードフォーマット
VIS_CSTYLE
(以下で説明する)
を選択する場合にのみ使われる。
strvis
()
と
strvisx
()
関数は、 文字列
src
を表示可能文字にしたものを
dst
にコピーする。
strvis
() 関数は、
src を NUL
文字
が現れるまでエンコードする。
strvisx
() 関数は、
src をちょうど
len
文字分だけエンコードする
(これは NUL
を含むデータブロックをエンコードするのに役立つ)。
どちらの形式でも、
dst は NUL
終端される。 dst
の大きさは、エンコードされる文字
src の数の 4 倍 (+
NUL
のための 1
文字分)
でなければならない。
どちらの形式でも dst
の文字数が返される
(最後の NUL
は含まない)。
エンコードは唯一のもので、全て表示文字から構成された可逆表現になっている。 つまり、エンコードされた文字は、 unvis(3) や strunvis(3) 関数を用いて元の形式にデコードすることができる。
制御可能な 2 つのパラメータがある: エンコードされる文字の範囲と使われる表現のタイプである。 デフォルトでは、スペース・タブ・改行以外の非表示文字がエンコードされる (isgraph(3) を参照)。 以下のフラグは、この動作を変更する:
VIS_SP
- スペースもエンコードする。
VIS_TAB
- タブもエンコードする。
VIS_NL
- 改行もエンコードする。
VIS_WHITE
VIS_SP
|VIS_TAB
|VIS_NL
と同じ。VIS_SAFE
- 「安全でない」文字だけをエンコードする。 安全でないとは、一般的な端末に予期せぬ機能を動作させてしまうことを意味する。 現在のところ、スペース・タブ・改行・バックスペース・ベル・リターン - そして全ての表示可能文字 - はエンコードされない。
3
つのエンコード形式がある。
全ての形式で、バックスペース
‘\
’
が特殊シーケンスの始まりとして使われる。
2
つのバックスペースが実際のバックスペースを表現するために使われる。
以下のような可視化フォーマットがある:
- (デフォルト)
- メタ文字 (8
ビット目を使う文字)
を表現するためには、
‘
M
’ を使うこと。 制御文字 (iscntrl(3) を参照) を表現するためには、キャレット ‘^
’ を使うこと。 以下のフォーマットが使われる: VIS_CSTYLE
- 標準的な非表示文字を表現するために、
C
言語形式のバックスラッシュシーケンスを使う。
このような文字を表すために以下のシーケンスが使われる:
\a
- BEL (007)\b
- BS (010)\f
- NP (014)\n
- NL (012)\r
- CR (015)\t
- HT (011)\v
- VT (013)\0
- NUL (000)このフォーマットを使った場合、
NUL
文字を ‘\000
’ ではなく ‘\0
’ としてエンコードするかを決定するために、引き数 nextc が参照される。 nextc が 1 個の 8 進数の場合、曖昧さを避けるため後者の表現が使われる。 VIS_OCTAL
- 3 個の 8
進数シーケンスを使う。
‘
\ddd
’ という形式が使われる。 ここで d は 8 進数を表す。
さらに、もう 1
つフラグ VIS_NOSLASH
がある。
このフラグは、2
つのバックスラッシュと
デフォルトフォーマットで前におかれるバックスラッシュを使わないようにする。
(つまり、制御文字は
‘^C
’
で、メタ文字は
‘M-C
’
で表される)。
このフラグが設定されると、エンコードは曖昧で可逆でなくなる。
関連項目¶
履歴¶
これらの関数は 4.4BSD で初めて登場した。
June 9, 1993 | Linux NetKit (0.17) |