ToDo:
新鯖 on-borad 82573L(PCIe x1)から 旧鯖 on-borad 82547EIへのTCP通信速度(MTU 9000bytes)
Packet size 1k bytes: 88904 KByte/s Tx, 67312 KByte/s Rx. Packet size 2k bytes: 89250 KByte/s Tx, 67373 KByte/s Rx. Packet size 4k bytes: 89175 KByte/s Tx, 66579 KByte/s Rx. Packet size 8k bytes: 89029 KByte/s Tx, 66953 KByte/s Rx. Packet size 16k bytes: 89313 KByte/s Tx, 67217 KByte/s Rx. Packet size 32k bytes: 89588 KByte/s Tx, 66796 KByte/s Rx.
新鯖 Server 1000MT 82545EM(PCI 32bit 33MHz)から 旧鯖 on-borad 82547EIへのTCP通信速度(MTU 9000bytes)
Packet size 1k bytes: 88572 KByte/s Tx, 78157 KByte/s Rx. Packet size 2k bytes: 89517 KByte/s Tx, 89485 KByte/s Rx. Packet size 4k bytes: 89470 KByte/s Tx, 89513 KByte/s Rx. Packet size 8k bytes: 89509 KByte/s Tx, 89213 KByte/s Rx. Packet size 16k bytes: 89593 KByte/s Tx, 89526 KByte/s Rx. Packet size 32k bytes: 89504 KByte/s Tx, 89554 KByte/s Rx.
Q編集記述子は、すでに調べた通りベンダー拡張なので 使うべきでは有りません。read文に置いては、Q編集記述子が 表れた時点でバッファ無いに有る文字数を返すので(Q,A)と 書けば、読み込んだ文字列の長さが判るわけです。 Fortranの文字列仕様(変数のサイズは固定でも中身のサイズが判らない)で パーサー書くには必須とも言える機能なので、新しいFortranには 同等の機能が無いはずは無いと思うのですが...やはり有りました(w
Fortran90の停留入出力での入力で、
integer :: nc character(len=256) :: s read(lfno, fmt='(A256)', advance='no', size=nc) s
という構文が使えます。ここでは、 sは長さ256の文字列バッファに 入力lfnoから改行・ファイル終端が来るか最大256文字読み込むまで 読み込み、読み込んだ文字数を ncに格納します。 停留入力なので、改行が来る前に書式指定の終端に達した場合は、 ファイルポインタはそこで停止します。 つまり、入力を1文字づつ読み込むことも可能です。
これ自身は、Fortran90規格に有るので g95でも使えるのが味噌
ただし、改行は特別扱いなので unibyte-stream入力には 厳しいですね。もちろん、改行記号が特定1-character のみな処理系なら改行を検知したところで、バッファに自前で 改行記号を送り込めば良いわけですが、移植性がありませんね (改行記号が1-characterでもCRかLFかそれ以外かは環境依存)
実際、Fortran I/O libraryが気を利かせている実装の場合、unix上でも CR-LFのシーケンスを改行記号に扱ったり(例えばg95/gfortran)、 単独のCRに対して次のLFを読みにいってCR+LFで無い場合は 改行記号扱いし次の一文字は読み飛ばしたままだったり(例えばgfortran) するのでunibyte-stream入力を停留入力で扱うのは難しそうです。
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記