| 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_WHITEVIS_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) |