[表示 : 全て 最新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/

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

697 名前:デフォルトの名無しさん [2005/08/14(日) 00:32:09 ]
リモートコンピュータのCPU使用率の取得方法を教えてください。

698 名前:デフォルトの名無しさん mailto:sage [2005/08/14(日) 01:28:55 ]
>>697
リモート側でrstatd動かすとかsnmp使うとか




699 名前:デフォルトの名無しさん [2005/08/14(日) 12:12:00 ]
Cのプログラムで、
UNIX上で、とあるコマンドをどのユーザーが発行しても同一ユーザーが
発行しているようにさせたいのですが、どのようにすればいいのでしょうか?

自分で思いつくところだと、コマンドを発行させたいユーザが起動するデーモン
プログラムに、その他ユーザーが発行要求を投げて。デーモンはそれをSystem関数やら
何やらで発行して結果を返す。という感じで考えているのですが、
他に妙案ってありますでしょうか。

文章力無くてすみません


700 名前:デフォルトの名無しさん mailto:sage [2005/08/14(日) 12:25:41 ]
man chmod

701 名前:699 mailto:sage [2005/08/14(日) 12:44:24 ]
>>700

返信ありがとうございます。
実行権を与える、というわけではなくてA、Xとユーザーが存在するならば、

Aがxxxを実行 →psで見るとxxxをAが実行していることになっている。
これを、
Xはxxx_daemonを起動しておく
Aがxxx_daemonを実行 → xxx_daemonからxxxをコール →psで見るとxxxをXが実行していることになっている。

という事がしたいのです。


702 名前:デフォルトの名無しさん mailto:sage [2005/08/14(日) 13:44:30 ]
man setuid

703 名前:699 mailto:sage [2005/08/14(日) 14:23:17 ]
>>702
ありがとうございます。setuid使えばなんとかなりそうです。
お騒がせしましてすみませんでした。



704 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 09:42:45 ]
プログラム上からディレクトリを作成する方法を教えてください


705 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 09:53:02 ]
mkdir(2)

706 名前:669 [2005/08/15(月) 23:38:03 ]
度々すみません。
早速レス頂いたとおりchmod ug+sでモジュールに権限つけたら上手くいったのですが、
該当モジュールがシェルで、中でコマンド発行している場合はユーザが元のユーザで実行
している扱いになってしまいます。(man chmodでもそう書かれていたのですが)。
これを回避する方法ってありますでしょうか?



707 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 00:02:38 ]
なんで派生して自分で考えようとは思わないの?
ってかなんでそっちなんだ?

708 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 01:21:32 ]
man setuid



709 名前:デフォルトの名無しさん [2005/08/16(火) 10:12:28 ]
C言語で現在の時間を変更する関数を教えてください

710 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 10:17:02 ]
settimeofday


711 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 10:18:30 ]
man man

712 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 10:21:46 ]
>>709
限りなく光速に近い速度で移動する

713 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 10:40:23 ]
co というコマンドの使い方を教えてください

714 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 10:50:35 ]
まずci

715 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 12:34:42 ]
>>713
man co だろ。はいはいワロスエロス

716 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 14:47:45 ]
>>713
限りなくco速に近い速度で移動する

717 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 15:56:27 ]
そんなco息な答えを

718 名前:デフォルトの名無しさん mailto:sage [2005/08/16(火) 22:16:53 ]
coこはくだ質なインターネッツですね



719 名前:669 [2005/08/17(水) 00:10:13 ]
>>707
>>708

結局所有者rootのCモジュールにug+s、で、その中でsetuidしてsystem関数をコールさせることで
落ち着きました・・・まだ実機で確認取れてないんですが(汗

アドバイスありがとうございました(感謝


720 名前:デフォルトの名無しさん mailto:sage [2005/08/17(水) 01:45:51 ]
>>719
まぁそういう場合はsudo使うと楽なのだが。






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

前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