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

■ このスレッドは過去ログ倉庫に格納されています
2011/04/18(月) 17:06:36.77
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド 

前スレ 
Part9 http://hibari.2ch.net/test/read.cgi/tech/1205795434/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1147946176/ ;
Part7 http://pc8.2ch.net/test/read.cgi/tech/1127373405/ ;
Part6 http://pc8.2ch.net/test/read.cgi/tech/1116908090/ ;
Part5 http://pc8.2ch.net/test/read.cgi/tech/1105723117/ ;
Part4 http://pc5.2ch.net/test/read.cgi/tech/1095843584/ ;
Part3 http://pc5.2ch.net/test/read.cgi/tech/1085930894/ ;
Part2 http://pc5.2ch.net/test/read.cgi/tech/1055110889/ ;
Part1 http://pc2.2ch.net/tech/kako/992/992057422.html ;


Part3のミラー 
http://makimo.to/2ch/pc5_tech/1085/1085930894.html ;
Part2のミラー 
http://makimo.to/2ch/pc5_tech/1055/1055110889.html ;
189177
垢版 |
2011/11/07(月) 00:36:34.52
情報系の院生として研究に従事していますが,自分の立ち位置は「他学問から対象問題を収集,複数の手法を組み合わせて解く」こと.
問題に対する解法の有効性を検証するのが仕事なので,シンプルに組んでそこそこ新しい計算端末で4日ほど計算させる.
有効性が検証されたら,複数の小問題として分割して学部生の卒論として展開されます.
なのでGPGPUやMap-Reduceなどの先進的な手法を自分で扱いたいのですが,そこまで時間を確保できない.

>>186
すみません,利用する選択肢で書いてしまいました.
ただGPGPUなどもそうですが,自然科学分野の対象問題を性能を引き出すように構築するのって
すごく難しい(この変数が何バイトで…と考えなければならないので)

>>187
昔といってもベーマガ全盛期のあたりを指しています.
教科書を元に脇目もふらず,ロジックを検討できるのはいいなぁと思います.
今ではWebアプリ(phpからJSP,RoRなど)やクラウドも登場して選択肢と夢ばかりがひろがりんぐです.

>>188
そのとーりだと思います

2011/11/07(月) 02:56:08.65
コンパイルが通らなくて困っています。
OS BSD/OS 4.3
コンパイルしたいもの libfetch
コンパイラgcc 2.95.3
cc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized
-Wreturn-type -Wcast-qual -Wpointer-arith -Wwrite-strings
-Wswitch -Wshadow -Werror -D_LARGEFILE_SOURCE
-D_LARGE_FILES -D_FILE_OFFSET_BITS=64
-DDEF_UMASK=0022 -I/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/libarchive
-I/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch
-DHAVE_NBCOMPAT_H=1
-I/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat
-I. -D_LARGEFILE_SOURCE -D_LARGE_FILES -DFTP_COMBINE_CWDS -c common.c
cc1: warnings being treated as errors
common.c: In function `fetch_write':
common.c:639: warning: function declaration isn't a prototype
というエラーでコンパイルが通りません
common.cのソースは
#ifndef MSG_NOSIGNAL
#include <signal.h>
#endif


2011/11/07(月) 02:56:51.16
ssize_t
fetch_write(conn_t *conn, const void *buf, size_t len)
{
struct timeval now, timeout, waittv;
fd_set writefds;
ssize_t wlen, total;
int r;
#ifndef MSG_NOSIGNAL
static int killed_sigpipe;
#endif

#ifndef MSG_NOSIGNAL
if (!killed_sigpipe) {
signal(SIGPIPE, SIG_IGN);
killed_sigpipe = 1;
}
#endif
639行目はsignal(SIGPIPE, SIG_IGN);になります。
man signalをした所
void *signal(sig,func());
void (*func)(sig)
と書いてありました。
<sys/signal.l>ヘッダファイルは
__BEGIN_DECLS
void (*signal __P((int, void (*) __P((int))))) __P((int));
__END_DECLS
#endif /* !_SYS_SIGNAL_H_ */
と書いてありました。
もちろんヘッダファイルにSIGPIPEとSIG_IGNは定義してあります。
これはOS側のsignalが古すぎてコンパイルできないのでしょうか?
なんとか良い方法は無いでしょうか?
2011/11/07(月) 04:36:48.82
>>191
>OS BSD/OS 4.3

えらく懐かしいものをお使いで。特に自分で解決できる技量がない場合には、
より新しくて沢山の人が使っている環境を使った方が楽だよw で、

安直な方法: -Werror なしでコンパイルする

もう少しちゃんとした方法:
1) 本当に signal(SIGPIPE, SIG_IGN); の箇所か確認(試しにここをコメントアウトしてみる等)
2) 関数やその引数に最終的にどういう宣言が使われているか確認。プリプロセッサ処理
後のファイルをチェックしてみるとか。
(3) (2)の原因を理解して修正。インクルードやマクロ定義を修正したりとか。

>void *signal(sig,func());

manにこう書いてあるのはググってもそうひっかからないんだけど
http://mail-index.netbsd.org/netbsd-bugs/1996/03/24/0001.html
というのがあるので、あるリリースのBSDにはそういうmanが付いてきたのかもね。
2011/11/08(火) 01:55:19.23
>>192
すいません。
ありがとうございます。
1)はコメントした所、コンパイルとおりました。
2)はすいません。gccとpkgsrcに不慣れなため、まだ試していません
3)はビンゴだと思います。
たぶんBSD/OS 4.0のmanをインターネットで見つけたのですが、
http://www.eecs.harvard.edu/syrah/vino/release-0.40/man/programref/libc/signals/signal.3.txt
void(*signal(int sig, void (*func)());)()
と正しいようです。
ヘッダファイルを修正してやってみます。
2011/11/22(火) 02:33:19.77
リチャードスティーブンスの本でわからない点があるので質問します

unixネットワークプログラミングでifreq構造体ifr_dstaddrの説明でp-to-pリンクの反対側とありますが

どういうことでどういう値が入るのでしょうか
2011/11/22(火) 09:03:54.79
ifconfigでPPPなどのpoint-to-pointなインターフェースを作ると、
対向側のIPアドレスが入る。
2011/12/07(水) 19:19:33.28
Xclockとか一見シンプルそうなアプリでさえ
ソースコード見るとすんげえ量で萎える

人のコード見て勉強とかちょっと疲れてきた
2011/12/07(水) 20:19:34.24
Win32API ほどじゃない
2011/12/07(水) 21:35:07.67
>>196
http://www.pygtk.org
http://live.gnome.org/Seed
GUIアプリならこういうので書けば? あるいはせめて、
http://www.gtk.org
2011/12/07(水) 22:21:43.40
wxPython オヌヌメ
2012/01/20(金) 17:00:54.36
xmessageって便利やな 
201デフォルトの名無しさん
垢版 |
2012/01/20(金) 19:51:48.27
今ubuntuのGCCコンパイラが4.5.2 が入っているんですが、
そのGCCコンパイラを4.4.5にダウングレードしたいのですが、どうすればいいですか?

2012/01/20(金) 20:11:06.84
パッケージのダウングレードなら犬板のUbuntuスレ、ソースからコンパイルならGCCスレで聞く方が良さ気
2012/01/20(金) 20:14:03.88
>>202
ヒントサンクス
そこで聞いてみるノシ
2012/01/21(土) 13:52:42.46
【プログラミング部】 PHPが100倍速で動くようになったぞー
http://awabi.2ch.net/test/read.cgi/poverty/1327050821/
2012/01/25(水) 02:16:44.58
LinuxとかBSD系ってUNIXじゃなかったのな
昨日初めて知った
ってことはLinux系の質問はここじゃスレチになるのか
2012/01/25(水) 04:27:28.79
1によるとUNIX cloneも含んでいるからおkよ
2012/01/25(水) 15:13:45.95
つうか清く正しいAT&Tの血統はまだ残っとるのか?
2012/01/26(木) 04:58:13.71
LinuxはUNIXじゃないがBSDはUNIXで良いと思ってた
2012/01/26(木) 10:04:56.87
BSDはUNIXの血を浄化しました。
2012/01/26(木) 14:15:55.41
BSDはトレードマークである「UNIX」は名乗れないです。
opengroupの認証通ってないので。
2012/01/26(木) 14:37:35.26
敢えてソースから何から全部書き直して
ライセンス汚染してないことにしてる?
2012/01/26(木) 14:47:49.48
短いからとりあえずこれでも読めば
http://ja.wikipedia.org/wiki/BSD
2012/01/26(木) 15:34:29.19
Single UNIX Specification - Wikipedia
http://ja.wikipedia.org/wiki/Single_UNIX_Specification

これにLinuxもBSD系もどうたらこうたらって読んだ
2012/01/27(金) 03:47:31.46
まだ初心者で申し訳ないのですが、
Ubuntu上でC++言語(g++)でマウス操作をやりたいと思い、
XAutomationのxteのソースを見て真似てみました。元はC言語でかかれています。

#include <X11/Xlib.h>
#include <X11/extentions/XTest.h>

としていて、そのヘッダではifdefでC++の場合は extern "C" が付きます。
なので自分の.cppでは特別なことをせずにXTestFakeMotionEvent(..)が呼べるはずなのですが、
リンカが"undefined reference to XTestFakeMotionEvent"とエラーを出します。
どうすればよいでしょうか?
2012/01/27(金) 04:16:59.41
-iXtst してる? gccのコマンドライン晒したほうがいいよ
できれば最小限のソースも
2012/01/27(金) 05:41:13.84
あれ、l って打ったつもりが i になってる。ごめん
-lXtst の誤り。詳しくは man xtestqueryextension で
2012/01/28(土) 01:10:43.39
Macの質問もここでおkなの?
2012/01/28(土) 02:58:00.76
Mac固有にならなければ
2012/01/28(土) 03:22:15.70
マックってユニックスだったんか
知らなかったわ
2012/01/28(土) 20:27:34.75
ということはiPhoneの質問もここでおkかな?
2012/01/28(土) 20:33:41.08
iOSはUnix系だとあるけど
iPhoneでUnix的な使い方ってできたんだっけ?
2012/01/28(土) 22:49:16.13
mmapとか動くよ
2012/01/29(日) 10:19:19.06
>>221
「使い方」によるが、
カーネルとAPIの一部がBSDとコードベース同じだから。
224デフォルトの名無しさん
垢版 |
2012/02/07(火) 20:55:21.88
おねがいします


プロセス間通信で使う、名前付きFIFOをPスレッド間で使うことは可能でしょうか?
それともなにか問題が発生するでしょうか?

また、名前付きFIFOの名前を既存ファイルとかぶらないように自動生成する方法はありますか?
225デフォルトの名無しさん
垢版 |
2012/02/07(火) 21:16:13.63
vimrcとかbashrcとかscreenrcのrcって何の略なんですか?
2012/02/07(火) 21:25:42.05
run commandの略だという説が有力
2012/02/07(火) 21:35:56.81
UNIXの部屋 コマンド検索:rc (*BSD/Linux)
http://x68000.q-e-d.net/~68user/unix/pickup?rc
2012/02/07(火) 23:49:16.68
>>224
プロセス間で使えてスレッド間で使えなくなる理由が分からない
その内容だとpipeで十分に思える。というより、そういうライブラリ使ったほうがオーバーヘッドがないような
一時ファイルはmktempで作ると他と衝突しない
2012/02/08(水) 02:35:32.10
× mktemp
○ mkstemp
じゃなかったかな。

>>224
SIGPIPEのハンドリングが難しいのかな。
よくわかってないけどw
2012/02/08(水) 02:56:19.60
mkstempって普通ファイル以外作れたか?
231デフォルトの名無しさん
垢版 |
2012/02/08(水) 07:55:45.41
>>226,227
ありがとうございました
2012/02/08(水) 20:32:47.58
>>228
>>229
>>230

用語を間違えていました。
名前付きFIFOではなく、名前付きパイプ(=FIFO)でしたね。失礼しました。


スレッド間だともしかして排他処理がうまくできないのではと思ったもので。
スレッド間で使うなら確かに匿名パイプのほうが適切ですね。

mktemp()のセキュア版であるmkstemp()は、ファイル自体を作ってしまうのですが、
普通のファイルをパイプ化できるのであれば問題ないのですが、
どうもそのようなことをしてくれるシステムコールは存在しないようで・・・

tmpnam()で名前だけ作ってmkfifo()でFIFOを生成してもいいのですが、
tmpnam()のせいでコンパイル時に恐ろしげな警告が出るのが気持ち悪くて・・・


・・・困りました
2012/02/08(水) 23:27:28.46
スレッド間ならファイルディスクリプタは共有しているので、名前付きである必要な理由は無いな。
あえてnamed pipeを選択する理由は?
2012/02/09(木) 00:30:27.29
名前付きを使いたいのはスレッド間ではないです
2012/02/09(木) 00:37:06.84
forkすればファイルディスクリプタは複製されるし、全く別のプロセスに
ソケットを使ってファイルディスクリプタを送信することもできたはず

というかその用途ならソケットで通信すればいいのでは?
2012/02/09(木) 00:39:23.33
> プロセス間通信で使う、名前付きFIFOをPスレッド間で使うことは可能でしょうか?
> 名前付きを使いたいのはスレッド間ではないです
どっちが本当?
2012/02/09(木) 00:47:02.99
下が本当です


上はうっかりミスで、
「プロセス間通信で使う、パイプをPスレッド間で使うことは可能でしょうか?」
が意図したQでした。

よって、想定しているシチュエーションは2つあったわけです。
1. スレッド間でパイプ使用
2. (プロセス間の)FIFOのユニークな名前の自動生成
2012/02/09(木) 00:50:14.29
できればプロセス間でも親子関係とか持たせてパイプにする方がいいような。
どうせユニークな名前をどうにかして相手に伝えないといけないんでしょ。
2012/02/09(木) 00:56:05.42
パイプでつなぎたい先のプロセスは、独立した実行ファイルによるものですので
2012/02/09(木) 00:56:56.90
forkしてパイプ準備してからexecすればいいのでは
2012/02/09(木) 01:03:48.90
寝ぼけてました・・・
全く、そのような方法でやろうと自分でも考えていました。
2012/02/09(木) 01:12:26.89
書き込む前に一度読み直して人に伝わるかどうか位確認しろw
結局>>240の提示した方法で実現できそうな話だったんだな?
2012/02/09(木) 06:14:23.72
パイプの名前は?
2012/02/09(木) 11:21:57.81
>>243
ズシオ
2012/02/09(木) 13:40:45.86
SIGPIPEウゼエって時は、
int result = send( fd , buffer ,size , MSG_NOSIGNAL);
ってやり方もある。OSとfiletypeを選ぶけども。
2012/02/09(木) 18:25:23.87
SIGPIPEなんて速攻でIGNOREしてたわ
2012/02/09(木) 19:24:31.48
解決した後で聞かれもしてない事(しかも大した情報量がない)を
ドヤ顔で言い出す奴ってかなり恥ずかしい。
2012/02/09(木) 22:59:21.62
ためになるからイナフだ
2012/02/10(金) 12:53:22.71
>>247は可哀想。
250デフォルトの名無しさん
垢版 |
2012/02/10(金) 20:19:25.23
system()がダメでexec*()じゃなければならない場合って具体的にどういう使いどころですかね?
2012/02/10(金) 20:30:04.86
・forkした後にあれしたりこれしたり
・login shellに左右されたくないコマンドライン
2012/02/10(金) 21:47:45.05
すいません・・・
そこをもう一声具体的に・・・悲
2012/02/10(金) 21:53:36.60
自分とパイプで繋がった子プロセス内で外部のプログラムを実行できたりとか
2012/02/10(金) 22:01:58.79
コマンドラインとして渡す文字列(の一部)が文字列としてプログラム外からやってくる時。
2012/02/10(金) 22:11:03.48
>>253
これは、なるほど!
実際試してみます

>>254
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\
2012/02/10(金) 22:16:24.42
fork+execとsystemの違いってなんですか、ならわかるけど
forkとsystemの違いってなんですか、だと根本的に勘違いしてるだろうからman読んだほうがいいよ
2012/02/10(金) 22:19:18.11
こんな>>255態度で返す奴ってなんなの?
2012/02/10(金) 22:26:11.92
「シェルを通すか通さないか」という言葉ぐらいは知ってるんですが、
じゃあ、使い分けが必要なのは具体的にどういう箇所で?となると
わかっている人に教わったほうが間違いがないかと思ったものですから・・・謝
2012/02/10(金) 22:32:43.19
言い訳だけしてまともに謝る事すらできないのか
人間のクズだな
2012/02/10(金) 22:40:55.98
ごめんなない
2012/02/10(金) 22:51:07.88
誠意を見せたかったらどうするのかわからないのか?
教えてやろう。画像を貼るんだよ。
2012/02/10(金) 23:12:37.26
http://www.youtube.com/watch?v=xISG4nGTQYE

いかがでしょうか?
2012/02/11(土) 00:25:56.53
systemとexecじゃできることが違いすぎて何を聞きたいのかが不明過ぎる
2012/02/11(土) 00:34:15.31
はったりはやめなよ
2012/02/11(土) 00:42:24.53
UNIX勉強しろよ
2012/02/11(土) 00:53:47.37
薀蓄自慢したい人ですかね?
267デフォルトの名無しさん
垢版 |
2012/02/11(土) 11:43:52.95
>>263
別プロセスを生成させる以外になにか大きな使い方の差があるのでしょうか?
2012/02/11(土) 11:48:54.36
>>267
シェルがあるかないか も超重要じゃね?
2012/02/11(土) 11:50:30.76
>>267
・systemは1)プロセスを生成して、2)別バイナリを実行する。
1と2の間にいろいろできる。(パイプでつなぐ、資格情報の制御、リソースの制限などなど)
・systemはshに実行させる。shの機能(リダイレクトとか)が使える反面、セキュリティ上の問題を起こしやすい。
2012/02/11(土) 12:25:17.58
>>264,266,267
やるきねーだろ
2012/02/11(土) 16:31:24.52
やる気はあります!
レスが付くまで全裸で待機していましたし
2012/02/11(土) 16:39:39.91
全裸待機する暇があったらman 3 system; man 3 exec
2012/02/11(土) 16:49:39.39
らめえぇぇぇぇぇぇぇ

システムのページサイズを超えてかきこまないでぇぇぇぇ
あたしまだバージョン 2.6.11 より前なのにぃぃぃぃぃ


みたいな
2012/02/11(土) 17:31:53.25
Linux板でも逝け
2012/02/11(土) 20:16:56.46
あそこは管理系の薀蓄でブヒってるのが多いからなんとなくイヤ
「お前が管理しているそのツールのこの機能はどうやって作るのか」
という質問には答えてくれなそう
2012/02/11(土) 21:06:14.73
>>275
> 「お前が管理しているそのツールのこの機能はどうやって作るのか」

何言っているかよくわかりませんw
2012/02/11(土) 22:19:30.22
詳解UNIXプログラミング
UNIXカーネルの設計
を読み終わったらまたいらっしゃい
2012/02/11(土) 22:38:19.99
そしてだれもいなくなった(未完)
2012/02/11(土) 22:48:13.34
嵐の番組ってCMが生理用品ばっかでワロス
2012/02/11(土) 23:10:22.97
>>278
まだまだ
2012/02/11(土) 23:58:08.93
>>277
>詳解UNIXプログラミング
棚から引っ張り出して眺めているが、内容が古くて実用に注意を要する
もっと新しいの同等品を教えろ
2012/02/12(日) 00:18:42.76
2/eが出てるよ
2012/02/12(日) 00:38:58.73
違いを意識したことないが、その手の本でPOSIX 2008に対応してるのってあるの?
2012/02/12(日) 01:04:05.10
思いあたるのはこれ
http://www.man7.org/tlpi/tlpi_in_detail.html
2012/02/12(日) 01:50:48.07
>>284
表紙キモ!!!!!!
陰嚢の皺を無数の虱に這い回られているような気持ち悪さだ
2012/02/12(日) 02:04:12.95
旨そうなゼンマイだと思ったのにw

>>284
へーLinuxか。2008の機能も実装してたのか。この辺りの各OSごとの実装状況はまるで分からんが、
実装されているならマニュアルもあるだろうからそっちから調べるのもありだな。ありがとう
2012/02/12(日) 04:11:48.67
>実装されているならマニュアルもあるだろう

(;゚ Д゚) …!?
(つд⊂)ゴシゴシ
2012/02/12(日) 10:22:03.92
http://man7.org/tlpi/translations/index.html
> Japanese O'Reilly Japan Announced (Q2 2011).
> Publication likely in second half of 2012.

絶対出ないと思ってたのに
今の日オラにこんな根性があるとは思わなかった
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。