<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ 2024年3月20日の投稿［3件］ - 電装工芸日記 - 舞台照明機器の製作とか - ]]></title>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi</link>
	<description><![CDATA[ 今年は開発案件を進めたい ]]></description>
	<language>ja</language>
	<copyright>Copyright 2026</copyright>
	<lastBuildDate>Fri, 24 Apr 2026 07:46:09 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" target="_top">てがろぐ</a> Ver 3.4.0 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　今日もホール増員置きダヌキしてました。珍しく旗日にオフだっ… ]]></title>
	<description><![CDATA[ 　今日もホール増員置きダヌキしてました。珍しく旗日にオフだったのですが、結構大掛かりなツアーだったので召喚された次第。<br />　ツアーの皆様は仕事が出来る人ばかりのためタッパまで終わればバラシまでヒマですから調べ物や研究が出来るのです。<br /><br />　そんなワケで、コンソール画面を書く手段を新たに見つけつつ、Art-Netパッチの基本設計や要となる要素を整理し終わりました。机上作業が終わったので次は実機試験です。<br />　VsCodeからSSHでRaspberryPiを触る方法で作業するのですが、この物理環境を今一度整備しましょう。パソコン、卓、node以外の必要な物が固定され配線されたトランク型のラップトップパソコンみたいなモノを作るです。配電盤箱よろしく中に合板を貼り付けてテキトウにビス止め出来るアルミトランクみたいなモノがあればいいでしょうか。これに電源(DC3.3v,5v,12v小型のSFX電源？)、RaspberryPi、モニタ、EtherneHubなどの基本用品と都度の課題で必要なモノを組み付けておくのです。キーボードはワイヤレスなので仕舞う場所だけ？？。ここまでしておけば場所を選ばず作業出来そうです。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e3%82%ac%e3%83%81%e5%b7%a5%e4%bd%9c" class="taglink" title="ガチ工作">#ガチ工作</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e5%99%a8%e5%85%b7%e3%81%ae%e8%a3%bd%e4%bd%9c" class="taglink" title="器具の製作">#器具の製作</a> -- Posted by 電装工芸 〔518文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=840</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=840</guid>
	<category>tegalog</category>
	<pubDate>Wed, 20 Mar 2024 22:44:15 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　コンソールの画面操作では「ＡＮＳＩエスケープシーケンス」を… ]]></title>
	<description><![CDATA[ 　コンソールの画面操作では「ＡＮＳＩエスケープシーケンス」を使うイメージでいましたが、「ncurses」と呼ばれる便利なライブラリがあることを今更知りました。これを使えばコンソール画面作りが楽になりそうです。<br />　キー操作の扱いを調べていたのですが、<a class="url" href="https&#58;//jp-seemore.com/iot/11222/" target="_blank" title="https&#58;//jp-seemore.com/iot/11222/">「C言語で矢印キーの入力を完璧に検出する5つのステップ」</a>を読んでいたら「ncurses」が便利とのこと。ここから調べを進めたところナルホドが連発。<a class="url" href="https&#58;//www.kushiro-ct.ac.jp/yanagawa/curses/about.html" target="_blank" title="https&#58;//www.kushiro-ct.ac.jp/yanagawa/curses/about.html">「cursesライブラリの超てきとー解説」</a>を読むと概要がわかるような。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%ef%bc%a3%e8%a8%80%e8%aa%9e" class="taglink" title="Ｃ言語">#Ｃ言語</a> -- Posted by 電装工芸 〔238文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=839</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=839</guid>
	<category>tegalog</category>
	<pubDate>Wed, 20 Mar 2024 19:29:59 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　SharedMemory(共有メモリ)であるmmapの使い… ]]></title>
	<description><![CDATA[ 　SharedMemory(共有メモリ)であるmmapの使い方が整理出来つつあります。<br />　検証はこれからですが、理解出来たところをオレメモとして書いておきます。<br />　あくまで「オレメモ」です。間違いアリアリでよろしくお願いします。<br />　なお、mmapには様々な用法あるらしい。下記はプロセス間の共有メモリに限った使い方です。<br /><small class="decorationS"><span class="decorationF deco-code">/* mmapを使うためのライブラリ */<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%69%6e%63%6c%75%64%65" class="taglink" title="include">#include</a> &lt;sys/mman.h&gt;<br /><br />/* 共有メモリにテキストを代入する */<br />char *st;　　　　// 扱うデータの型でmmapのポインタを設定<br />int msize = 4096;<br />st = mmap( NULL, msize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0 );　　// ここまでやってからfork()でプロセスを分ける<br />*st = &apos;TEST&apos;;　　　　// mmapに「TEST」が代入される(変数をポインタで扱う方法で扱える)<br /><br />/* 使用後は共有メモリを解放する */<br />munmap( st, msize );<br /><br />mmapの引数<br />１つ目(addr/NULL)：mmapを定義するメモリアドレスを設定する項目だが、NULLにしておけばOSが決めてくれる。<br />２つ目(size/msize)：確保するメモリサイズの指定。ページメモリのサイズの倍数にするベシというご意見と、欲しいメモリサイズを指定すればOSが調整してくれるというご意見など色々ある。変数の型からsizeofで得る方法(sizeof(int)など)を使われている方もいる。<br />３つ目(prot/PROT_READ | PROT_WRITE)：読み書きモードを設定する。この書き方だと読み書き両方可能にする。<br />４つ目(flag/MAP_ANON | MAP_SHARED)：MAP_ANONはファイルをマッピングせずに使う指定(共有メモリとして使うだけならこれでいい)、MAP_SHAREDはプロセス間で共有するという指定。<br />５つ目(fd/-1)：ファイルディスクリプタの指定だが、上記でMAP_ANONにしているので-1で無しとする。<br />６つ目(offset/0)：スタートアドレスからどれくらいずらしたところを使うか。<br /><br />　共有メモリは読み書きのタイミングをマネージしれくれませんので、何かしらの管理をしないといけません。<br /><br />参考：ページメモリのサイズを取得する<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%69%6e%63%6c%75%64%65" class="taglink" title="include">#include</a> &lt;unistd.h&gt;<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%69%6e%63%6c%75%64%65" class="taglink" title="include">#include</a> &lt;stdio.h&gt;<br />long page_size = sysconf( _SC_PAGESIZE );</span></small><br /><br />　ついでにpipeも。<br />　ただし、ここではpipe2(Linux固有)を使います。pipeの上位互換で引数でノンブロッキングの設定が出来るからです。通常のpipeはパイプが空の場合に有効なデータが取り出せるまで待ってしまいますがO_NONBLOCKを設定すると待ちません。<br />　なお、以前の書き込みでpipeは単純なスタックと書きましたが、Queue程マネジメントされていないFIFOです。訂正します。<br /><small class="decorationS"><span class="decorationF deco-code">/* pipeを使うためのライブラリ */<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%64%65%66%69%6e%65" class="taglink" title="define">#define</a> _GNU_SOURCE　　// よくわからないけど必要なおまじない？<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%69%6e%63%6c%75%64%65" class="taglink" title="include">#include</a> &lt;fcntl.h&gt;　　// O_*(ここではO_NONBLOCK) 定数の定義の取得<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%69%6e%63%6c%75%64%65" class="taglink" title="include">#include</a> &lt;unistd.h&gt;　　// pipeの本体を呼ぶ<br /><br />/* pipeの定義 */<br />int pipefd&#91;2&#93;;　　　// ファイルディスクリプタとしてint配列を用いる 変数の名前は任意<br />if( pipe2( pipefd, O_NONBLOCK ) &lt; 0 ) {　　// ファイルディスクリプタとする配列とノンブロッキングのフラグを引数にする<br />　// pipe2の戻り値が-1なら設定エラー<br />}<br /><br />/* pipeへの書き込み */<br />char *st = &quot;TEST&quot;;<br />write( pipefd&#91;1&#93;, st, strlen( st ) );　　// strlenは&lt;string.h&gt;が必要。成功なら書き込んだバイト数、失敗なら-1が戻る。<br /><br />/* pipeからの読み出し */<br />char buf&#91;128&#93;;<br />read( pipefd&#91;0&#93;, &buf, sizeof( buf ) );　　// パイプが空の場合はEOFを得るか戻り値が0になると思われる。成功なら読み取ったしたバイト数、失敗なら-1が戻る。<br /><br />/* pipeを閉じる(fork()して読み出し側書き込み側に分かれる場合はfork()した後に使わない側を閉じて運用する。もちろん終了する際にはすべて閉じる) */<br />close( pipefd&#91;0&#93; );　　// 読み出しを閉じる<br />close( pipefd&#91;1&#93; );　　// 書き込みを閉じる<br /><br />　int配列pipefdは&#91;0&#93;が読み出し&#91;1&#93;が書き込みになるファイルディスクリプタ。<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%64%65%66%69%6e%65" class="taglink" title="define">#define</a> MEMREAD 0<br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%64%65%66%69%6e%65" class="taglink" title="define">#define</a> MEMWRITE 1<br />　などとして使うとわかりやすいかも。<br /><br />　OSに寄りますが、スタック長は65536バイトが一般的らしい。<br />　pipeは読み書きのタイミングをマネージしてくれます。</span></small> <br /><br />　どちらもファイルを読み書きする手法を応用していますので、ファイルの読み書きの仕方を勉強しなおしてから取り組むとわかりやすいかもしれません。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%ef%bc%a3%e8%a8%80%e8%aa%9e" class="taglink" title="Ｃ言語">#Ｃ言語</a> -- Posted by 電装工芸 〔2308文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=838</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=838</guid>
	<category>tegalog</category>
	<pubDate>Wed, 20 Mar 2024 12:47:27 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

