[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 09:49 / Filesize : 207 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

UNIXプログラミング質問すれ Part6



1 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 13:14:50 ]
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド

前スレ
Part5 pc8.2ch.net/test/read.cgi/tech/1105723117/
Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/
Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/
Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/
Part1 pc2.2ch.net/tech/kako/992/992057422.html

Part3のミラー
makimo.to/2ch/pc5_tech/1085/1085930894.html
Part2のミラー
makimo.to/2ch/pc5_tech/1055/1055110889.html

関連スレ
Cygwin使っている人いますか? その14 (UNIX板)
pc8.2ch.net/test/read.cgi/unix/1107587275/
Cygwin使っている人いますか? 3 (Windows板)
pc8.2ch.net/test/read.cgi/win/1090131123/


関連板
pc8.2ch.net/unix/
pc8.2ch.net/linux/

596 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:29:14 ]
>>595
すべてのUNIXで共通して判別できる方法はありません

597 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:36:17 ]
>>595
intの最大値を調べてみたら?

598 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:38:21 ]
ILP64かもしれないし

599 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:39:03 ]
違った
LP64かもしれないし(つーか普通そう)

600 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:16:51 ]
sizeof(void*)
sizeof(long)
sizeof(int)
の結果を見て好きなように解釈すれ

601 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:22:37 ]
お前らアホか?
CPUのことだろ?
dmesgでCPUみたらいいだろ

602 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:26:28 ]
スレのテーマ的には実行中のプログラムが自分で判断する方法ということでは?

603 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:27:20 ]
>>595
実行してる環境の「何が」32ビットか64ビットかによって判定法が異なる。

604 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:55:47 ]
目的に応じてautoconfのマクロを自分で書けばよかろ




605 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 04:34:51 ]
>>601
OSが64bitであろうと32bitであろうと、
実行環境のbit数は関係ないだろう。emulatorかもしれないんだし。

606 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 12:28:22 ]
>>601
そもそも dmesg が入っているとは限らない。


607 名前:デフォルトの名無しさん [2005/08/07(日) 12:47:21 ]
uname -aはどうでしょう?

608 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 13:02:41 ]
CPUを見ても32bitか64bitかなんて決定できないだろ。
両方のバイナリを実行できるOSもあるし。
>>600,603あたりがFAじゃねーの。


609 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 13:06:00 ]
なんで600が?

610 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 13:16:35 ]
>>609
結局603を間がえたあと
www.opengroup.org/public/tech/aspen/lp64_wp.htm
見たいな感じで600のようなことをすることになるわけで。

611 名前:デフォルトの名無しさん [2005/08/07(日) 14:11:01 ]
select() システムコールはどのような時に使用するのでしょうか?
簡単な解説があるサイトを紹介していただいても結構です。


612 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 14:13:02 ]
www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html

613 名前:sage [2005/08/07(日) 14:17:31 ]
ありがとうございます。
例をもとに、動作検証してみます。

614 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 14:18:12 ]
>>611
ひとつのスレッドで同時に複数I/Oを実行したいとい



615 名前:sage [2005/08/07(日) 14:37:06 ]
ありがとうございます。>> 614
サンプルとか例などはありませんでしょうか?

616 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 14:45:35 ]
www.linux.or.jp/JM/html/LDP_man-pages/man2/select_tut.2.html

617 名前:デフォルトの名無しさん [2005/08/07(日) 14:51:05 ]
selectの掟とかあって、難しそうですが、
理解できるように努力してみます。
ありがとうございました。>> 614 616

618 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 17:05:00 ]
ファイルからの入力を監視しつつ標準入力を受け付けるような応用はselect()で事が足りるね。

619 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 18:12:18 ]
ファイルからの入力はselectしなくてもいつでも読み出し可能だろ

620 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 18:32:31 ]
nfsやgmailfsでも?

621 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 19:12:58 ]
>>620
理論上は

622 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 19:35:42 ]
readがブロックすることと、readに時間がかかるのは別。

623 名前:618 mailto:sage [2005/08/07(日) 20:18:08 ]
>>619
tail -f相当しながら標準入力をファイルに書き出すプロセスを実際に作った経験で書いたんだけど。

624 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 20:54:12 ]
tail -f相当って普通に考えて現在のファイル末尾まで
読んだらEOF返るだろ
select()しても無駄なんじゃないの
そのへぼプログラムはポータブルに動くのか?



625 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:09:09 ]
そうなんだ
ファイルがまだcloseしてないときでも
EOFが帰るのか
ちょっと試してみるか

626 名前:618 mailto:sage [2005/08/07(日) 21:14:50 ]
>>624
いや、標準入力はEOFにならないんだけど。

627 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:35:00 ]
なんか618がかわいそうになってきた。

628 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:41:54 ]
>>627
いや、>>619>>618が戦ってるだけだろ
>>618が標準入力とファイルを読む という話をしているのに対して
>>619がファイルは云々と標準入力のことを棚上げして
以降話がかみ合わないままなんだよ

629 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:48:25 ]
>>626
標準入力はEOFにならないとしてもファイルはEOFになるんじゃないの?
一度EOFまで達したファイルディスクリプタって
その後書き込みがあったときに読み込み可能になるの?
標準入力はselectで待てるけど、ファイルは最後まで読み切ったら
selectのタイムアウト後に自分でseekしてみるしかないんじゃなくて?
それは別々な処理だし、selectで待つとは言い切れないんじゃない?

630 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:52:40 ]
>>624
一旦EOFを返しても、そのファイルが拡大されれば、
その後のread(2)でデータが読める。select(2)もOK。
この仕様は4BSDが始めた。(たしかtail -fのために)

その頃のSystem Vは駄目だったけど、今これがダメなUNIXはないと思う。
www.opengroup.orgあたりはどういう風に言及しているのかな。

631 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:00:00 ]
拡大されるまでは無限ループし続けるのか
そりゃずいぶんな実装だなw

632 名前:630 mailto:sage [2005/08/07(日) 22:08:03 ]
GNUのtailなんかは再チェックのsleep時間を指定可能。

最近のUNIXはfile notificationがあるので、
(fcntl(2)のF_NOTIFY&DN_MODIFY)
こっちを使えば、いい場合もあるけど。(tail -fではみたことないけどね)

633 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:09:28 ]
結局select()でtail -fを実装できないのは同じだな
どんなプログラムだったんだろう・・・見てみたい

634 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:18:15 ]
>>632
EOFに達してもselect抜けるよね
EOFに達したあと、再度selectにつっこんだら
拡大されるまではブロックされるの?



635 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:16:39 ]
まぁ最近じゃ tail -f は sleep なんかせずに kqueue を使って
スマートに実装されてる訳だが。

636 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:42:36 ]
tail.c
www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/tail.c?rev=1.21&content-type=text/x-cvsweb-markup

637 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:57:54 ]
該当部分はこっちだろ。
tail/forward.c
www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/forward.c?rev=HEAD&content-type=text/x-cvsweb-markup

638 名前:デフォルトの名無しさん [2005/08/08(月) 00:57:00 ]
makefileの書き方で質問です。
makefileのあるディレクトリの下に、
Aというサブディレクトリと、Bというサブディレクトリがあり、
ここのサブディレクトリにもそれぞれmakefileがあります。
このとき、親ディレクトリからAとBの両方を一度にメイクするには
どのように書けば良いのでしょうか。

よく他人の作ったプログラムやLinuxのカーネルをメイクすると、
入ります ディレクトリ xxx
出ます ディレクトリ xxx
というような表示が出るのですが、その方法を教えてほしいです。

639 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 00:57:55 ]
echoコマンドつかってるんじゃね?

640 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 01:02:24 ]
>>638 make -C
pc8.2ch.net/test/read.cgi/tech/1029599472/

641 名前:618 mailto:sage [2005/08/08(月) 02:45:52 ]
最早恥晒しにしかならないみたいだけれど、一応概略のみ。
--
FILE * fp = fopen(file, "r");
fseek(fp, 0, SEEK_END);
for (;;) {
if (fgets(fp)) {
/* tail -f相当 */
}
FD_SET(0);
select();
if (rtn > 0) {
if (FD_ISSET(0)) {
if (!fgets(stdin)) {
break;
}
/* ファイルに書き出す */
}
--
実際にはこれにmsgが絡んでもう少し複雑。

642 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 10:08:29 ]
stdioとselectは混ぜるな危険。
バッファには先読みされてるがselectでは空という場合もあるぞ。

643 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 10:10:12 ]
正直、>>618には失望した

644 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 13:22:16 ]
setvbuf(f, _IONBF)やfflush()と併用すれば安全に使える状況も多い。
fscanf()あたりと使うのは絶望的。



645 名前:618 mailto:sage [2005/08/08(月) 18:52:10 ]
失望されちった。

流石に標準入力は実際にはfgets()してません。
バッファリングしない一行入力関数を作ってそれを呼んでます。
#だから概略なんだってば。

646 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:04:39 ]
FreeBSDまたはLinuxでpthreadを使用してメインスレッドとサブスレッド内で
sleep(3)を使おうと思ってるのですが、sleep(3)はスレッドセーフですか?
man(FreeBSDとLinuxの両方)を見たけどその記述が見つかりませんでした。

647 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:07:56 ]
駄目だよ。SIGALRM使っているから。select(2)使いな。

648 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:20:09 ]
>>647
SIGALRMでsleep(3)実装ってどんな化石OSの話でつか。

649 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:41:57 ]
>>648
( ゚д゚) ポカーン


(´-`).。oO(わからないなら黙ってればいいのに…)

650 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 02:55:14 ]
GUIプログラミングを学びたいのですが、どこから始めればいいでしょうか。
レベルはK&Rを読了です。


651 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 03:07:35 ]
>>649
( ゚д゚) ポカーン
thread safeにするため最近のOSじゃalarmは軒並みnanosleepで実装されてるよ。

(´-`).。oO(じじいはひっこんでりゃいいのに…)

652 名前:デフォルトの名無しさん [2005/08/09(火) 03:08:54 ]
alarmじゃねえ、sleepだ。
大事なところで噛んだ。ちきしょう。

653 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 08:08:50 ]
>>650
Xorg のソースあたりから

654 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 08:20:58 ]
Cしか知らんのならXtかGTKのチュートリアルくらいしかGUIへのとっかかりは
ないんじゃないか?




655 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 08:46:06 ]
Open Groupはsleep(3)のSIGALRMによる実装を許容。
www.opengroup.org/onlinepubs/009695399/functions/sleep.html
ポータブルにしたいなら、sleep(3)は使わない方がいいね。

656 名前:デフォルトの名無しさん [2005/08/09(火) 13:11:11 ]
UNIXドメインソケットをつくってbindしたときにできる
ソケットファイルのパーミッションは 何で指定するの?
あとから 777 に変えたいときはどうしたらいいの?
system("chmod a+rw hoge");はかっこわるくてもうヤ

657 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 13:20:24 ]
後からかえたいなら、fchmod(fd, 0777)。
出来ると同時に指定したいときは、umask(0)。
パーミッションを落すわけじゃないから、後でいいだろうね。


658 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 13:49:28 ]
>>656
かっこ悪いというより、頭悪いな。

659 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 16:43:40 ]
>>651
ようするに最近のOSはsleep(3)がスレッドセーフで実装されてるってことか?

660 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 21:39:20 ]
>>659
つまりnanosleepで実装されてれば○。alarmで実装されてたら×。
移植性高めたいならselect使えということ。

661 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 22:09:01 ]
nanosleep呼ぶ手も有ると思うが。

662 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 22:13:29 ]
それでわざわざこんなこと書いてるのか
www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html

663 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 23:16:37 ]
Winsockの流儀と移植性は別問題

664 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 00:23:08 ]
>>660
usleep()で実装されていても駄目(な可能性がある)。

nanosleep()は、signal non-intrusiveであることが保証されている。
www.opengroup.org/onlinepubs/009695399/functions/nanosleep.html
nanosleep()はPOSIXリアルタイム拡張。



665 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 01:07:24 ]
FreeBSDやLinux等が今現在、どういう風に実装していようが、
やっぱ、Pthreadを使用してsleepしたいならselectかpollを使用するのが無難だな。
sleep(3)は、過去(pthreadが無い時代)の物との互換性維持の為にあるようなもんだろ。

666 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 02:11:22 ]
POSIXのリアルタイム拡張か、出来ればアドバンスドリアルタイム拡張がないと、
pthread的には現代的なAPI設計とは言いがたいからね。

667 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 06:46:30 ]
>>663
そもそもここUNIXスレだしな
WinsockならSleepが確実にあるはずだからそれ使えというのも分かるけど

668 名前:デフォルトの名無しさん [2005/08/10(水) 09:11:37 ]
>>662
それのさ、BSDソケット版というかUNIX版?みたいな感じのやつはある?

669 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 09:38:00 ]
>>668
ネットワークプログラミングスレのテンプレへGO!

670 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 09:47:13 ]
ptyの使い方を解説したページってある?

671 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 10:19:55 ]
>>670
ttp://www.sony.co.jp/Products/Computer/NEWSWAVE/DevelopersInf/Porting/pty.html
あとはStevens本とか。


672 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 11:07:46 ]
>>670
script(1)のソース。
svn.clkao.org/svnweb/freebsd/checkout/cvs/branches/RELENG_5/usr.bin/script/script.c?rev=122468

673 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 11:08:50 ]
それからopenpty(3)を使うこt。

674 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 22:38:25 ]
errnoに自分で使う値を加えたいんですが、システムのerrnoと
値が衝突しないような方法はないでしょうか



675 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 22:41:11 ]
ありません

676 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 23:06:02 ]
大体、errnoに代入できるとは限らない。
関数呼び出しの可能性がある。with pthreadの場合。

www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_03.html#tag_02_03

677 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 00:42:57 ]
左辺値に展開される関数だからどっちにしても代入できるだろ

678 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 01:29:24 ]
>>676
そんなこといったら読み出しだって保証されませんよ?

679 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 11:16:56 ]
誰も何も保障してくれないのか

680 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 12:16:26 ]
誰も何も保障してくれない事は保障します

681 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 12:49:48 ]
linas.org/linux/persistance.html
このページの要約お願いします

682 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 13:37:17 ]
嫌です

683 名前:デフォルトの名無しさん [2005/08/11(木) 18:06:23 ]
Cursesとかで現在カーソルのある座標を取得する関数とかありませんか?調べていますがなかなか見つからない

684 名前:デフォルトの名無しさん [2005/08/11(木) 18:07:24 ]
>>683
環境はLinux、GCCです



685 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 18:10:28 ]
>>683
マルチは氏ね

686 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 18:18:04 ]
>>684=683
向こうに挨拶くらいしてから移動しろ。
cursesには現在座標を取得する関数は確かないから、
自前でどこにあるかを追跡し続ける必要があったと思う。
つーか、目的が判らんからそれ以上はなんとも言えん。

687 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 18:46:22 ]
Linuxならncurses
getyxだろ?

688 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 18:54:31 ]
cursesってまだ存在してるの?
正気?

689 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 19:13:10 ]
>>688
aho

690 名前:デフォルトの名無しさん [2005/08/11(木) 20:54:35 ]
>>686
>>687
ありがとうございます。勉強になりました。
ファイラーを作ろうとしているのですがカーソルを押したときに座標を読み取ってどのファイルが選択されているかをチェックしようとしていました。試してみます。



691 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 21:34:45 ]
>>688
え? Solaris ではデフォルトだけど。

692 名前:デフォルトの名無しさん mailto:sage [2005/08/12(金) 00:42:13 ]
実はマウスポインタの座標が欲しいんだったりしてw

693 名前:デフォルトの名無しさん mailto:sage [2005/08/12(金) 02:20:28 ]
ncursesならマウスも扱えるぜー!!!

694 名前:デフォルトの名無しさん mailto:sage [2005/08/13(土) 15:56:40 ]
メールの送信日時の欄にJSTなどのタイムゾーンが付加されますが
このタイムゾーンの文字列の取得方法を教えてください。





695 名前:デフォルトの名無しさん mailto:sage [2005/08/13(土) 16:18:36 ]
>>694
正規表現で抜けばいいんでないの?

696 名前:デフォルトの名無しさん mailto:sage [2005/08/13(土) 17:39:22 ]
>>694
time_t t = 1116908090;
printf("%s\n",localtime(&t)->tm_zone);






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<207KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef