Linux memo 2022/02/28

● 自分向け早見表
$ prog < filename --- (STDINをファイルから読み込みに置き換える)
$ prog > filename --- (STDOUTをファイルへ書き出しに置き換える)
$ prog >> filename --- (STDOUTをファイルへの追記書き出しに置き換える)
$ prog &> filename --- (STDOUT,STDERR両方をファイルへの書き出しに置き換える)
$ prog1 | prog2 --- (progのSTDOUTをprog2のSTDINにパイプでつなぐ)
$ prog1 |& prog2 --- (progのSTDOUTとSTDERRをprog2のSTDINにパイプでつなぐ)
$ prog1 <(prog2) --- (prog1はファイル名を受け取ったかのようにprog2からの出力を受け取る)

● プロセス置換
bashプロセス置換(process substitution)とは、ファイル名を渡されたかのように振る舞いつつ、実際には別のプログラムのSTDOUTを与えることができる。
内部実装としては、pipeへのreadとwriteになり、ファイル名の代わりにfile descriptorのpath(/dev/fd/[N]など)が渡される。
よく使うコマンドは、ファイル名の代わりにSTDINにPIPEを渡せることが多いが、その機能を持ってないような場合に使える。
...とはいえ私があまり使いこなせていないので良い例が思い浮かばない...

● isatty()をごまかす
STDIN/STDOUTがTTYなのかどうかを識別する関数としてisatty(3)がある。isatty(3)をうまく使うことで便利にしているコマンドが多いが、逆に、パイプやリダイレクトにしたときに挙動が変わり困ることがある。そういう場合、例えば、
$ cat - | prog
とすれば、isatty()はTTYじゃないといいつつ、キーボードからインタラクティブに入力することができる。
...あれ、これの逆は?
TTYのfd番号を調べて、/dev/fd/[N]にwriteすれば、isatty()はTTYだといいつつ、プログラムからSTDINに流し込める?

● c++でヘッダから実装stubを自動生成する
stubgenというのがあるが、C++03やC++11などには未対応の模様
https://github.com/mjradwin/stubgen
Lazy C++というのがあるが、略記法な疑似C++からヘッダと実装を生成するツールの模様。
code generation - Automatically generate C++ file from header? - Stack Overflow
https://stackoverflow.com/questions/1404614/automatically-generate-c-file-from-header
上記によればimpl_meというのがあるらしいが、swigを使う部分でうまく動かせなかった。
swig(1)は、C/C++と他の言語とで呼び出しをbridgeするwrapperを自動生成するツールらしい?

● 国旗の絵文字
国旗の絵文字は、Unicdeのコードポイントが用意されているわけではない。
ISO 3166-1に従いRegional Indicatorを2つ組み合わせてCombining Characterとして表現する。
このため、表示できるかどうかは環境に依存し、フォントだけでなくレンダリングシステムにも依存すると思われる。
2022年現在、Windows10は表示できないが、それ以外はだいたい表示できる模様。
なお2022年現在、Web版のTwitterやFacebookでは、Unicodeとして表示するのではなく、SVG画像に変換して表示している模様。(アプリ版は不明)

このブログ記事について

このページは、らるるが2022年2月28日 00:52に書いたブログ記事です。

ひとつ前のブログ記事は「Linux memo 2022/01/16 locale編」です。

次のブログ記事は「「ポストモーテム みずほ銀行システム障害 事後検証報告」読んだ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0