UNIXプログラミング質 ..
[2ch|▼Menu]
652:デフォルトの名無しさん
05/03/21 12:35:46
>>650
> dirname および basename は、静的に割り当てられたメモリへのポインタを
> 返すことがあり、これらの領域は後の関数呼び出しで上書きされるかもしれない。
…の部分に対する疑問?

それなら、

char * path = "foo/bar";
char * path_dup = strdup(path_dup);

char * path_dir = dirname(path_dup);

して、

free(path_dup);

すればいいだけだと思うが。

path_dup = dirname(path_dup);

みたいにすると、path_dup が strdup で確保したメモリじゃない可能性があるから、
free() するべきかどうか分からなくなるがね。


653:デフォルトの名無しさん
05/03/21 13:07:56
>>651
gethostbyname(3)なんかは、「*で返すのはstatic dataだべ」って書いてある。

URLリンク(www.opengroup.org)
のAPPLICATION USAGE



654:デフォルトの名無しさん
05/03/21 13:09:13
>>652
> char * path = "foo/bar";
> char * path_dup = strdup(path_dup);
>
> char * path_dir = dirname(path_dup);

ここでpath_dirの指す先がpath_dupの中かもしれないので

> free(path_dup);

ここでfree()してしまうとpath_dirが使えなくなりませんか?
何かすごくおかしいことを言っているのだろうか・・・

655:デフォルトの名無しさん
05/03/21 13:12:18
>>654
おまえ読解力ゼロ

656:デフォルトの名無しさん
05/03/21 13:26:42
>>654
付け加えると、path_dirは必要ならすぐに自前の領域にコピーしておくこと。
∵basename()を再度呼び出すと上書きされるから。

657:デフォルトの名無しさん
05/03/21 14:02:44
>>652
> char * path_dup = strdup(path_dup);
< char * path_dup = strdup(dup);

通りすがりに、取り合えず訂正しておくわ


658:デフォルトの名無しさん
05/03/21 14:03:51
>>657
m9(^Д^)プギャー

659:デフォルトの名無しさん
05/03/21 14:05:50
>>657
< char * path_dup = strdup(path);

間違えたわ…ハズ

660:デフォルトの名無しさん
05/03/21 18:31:51
>>652
「静的に割り当てられたメモリ」ってのはライブラリがstaticに持ってるバッファだと
言ってるように読めるんだが(バッファじゃないがerrnoみたいな)。
であるとすれば、free()するとおかしなことになるよな。
>>651が言ってるのはそういうことじゃないの?

661:デフォルトの名無しさん
05/03/21 18:34:51
strdup1つでここまで引きずるとは、さすがUNIX

662:デフォルトの名無しさん
05/03/21 18:42:03
>>660
だから basename の返り値を free しなきゃいいわけで、
basename に与えたポインタを free するのは問題ないだろ?

663:デフォルトの名無しさん
05/03/21 18:58:49
ここは小学生の溜まり場かよ。

664:デフォルトの名無しさん
05/03/23 02:23:26
>>660が正しい。POSIX仕様であっても、basename()は
引数で与えられた領域を上書きすることはない。だから、
上書きされることを気にしてstrdup()する必要もない。

どうもglibc-2.2.1までのPOSIXバージョンは、POSIXの
解釈を間違えていて上書きしてたことがあったようだが。
これはglibc特有のバグで、glibcを使ってなければ関係
ない。>>648の和訳のバグセクションは、そのあたりが
誤訳っぽいな。glibc-2.2.1より後でも問題があるように
読めてしまう。英語マニュアルを見れば明らかなんだが。

665:デフォルトの名無しさん
05/03/23 05:35:24
>>664
POSIXはどうかしらないけど、FreeBSD5.3だと
char * basename(const char *path);
って定義になってるから、引数のバッファは変更されることはなさそうね。
ついでに、返り値は「a pointer to internal static storage space」を返すとなってる。

>>652にあてはめるならこんな感じか。
char * path = "foo/bar";
char * path_dir = strdup(dirname(path));
/* ここでpath_dirを利用 */
free(path_dir);


666:デフォルトの名無しさん
05/03/25 14:31:04
666 ∈(・◎・)∋ 666


667:デフォルトの名無しさん
05/03/26 14:48:43
要するに、basename(3)使うときに、strdupもfreeも要らないわけだ

668:デフォルトの名無しさん
05/03/26 19:16:44
(゚Д゚)ハァ?

669:デフォルトの名無しさん
05/03/27 02:54:15
>>667
うん。ただし、basename(3)を複数回呼んで、その返り値を
後でまとめて使うような場合はmalloc(3)が必要となる。


670:デフォルトの名無しさん
05/03/27 11:34:39
別に固定バッファでもいいわけだが。

671:デフォルトの名無しさん
05/03/29 17:59:02
一つのプログラムファイルからしか使わない構造体があったとして
それをヘッダファイルではなく、foo.cの中で宣言定義するのってのは、
スタイル的に問題ないのでしょうか?

672:デフォルトの名無しさん
05/03/29 18:00:46
ここで質問する事が問題

673:デフォルトの名無しさん
05/03/29 18:36:19
>>672
BSDのソースではあまりみかけないのに、Linuxでは沢山あるので

674:デフォルトの名無しさん
05/03/29 20:13:11
漏れは、他のファイルに見せる必要の無いものは、
実際に見えないようにすべき、と考えます。

unixとは全然関係ないけどね。

675:デフォルトの名無しさん
05/03/29 20:23:30
させたいことと出来ることを一致させるのは大切ですね

676:デフォルトの名無しさん
05/03/30 16:22:54
>>674
俺も ノシ


677:デフォルトの名無しさん
05/03/31 15:18:49
suse9.1上でcを使って、ファイルサイズの取得方法を教えてください


678:デフォルトの名無しさん
05/03/31 15:21:08
>>677
stat()


679:デフォルトの名無しさん
05/04/02 23:47:35
hcreate()ってプログラムの中でひとつのハッシュ表しか使えないんですか?
だとしてこれは役に立つことがあるんでしょうか?

680:デフォルトの名無しさん
05/04/03 01:03:52
そりゃあるでしょ。
複数使いたければ、hcreate_r()使いなよ。

681:デフォルトの名無しさん
05/04/05 01:13:50
hcreate() なんてシラナンダ。自作してた…。

hcreate_r() は GNU 拡張か。


682:デフォルトの名無しさん
05/04/05 01:50:35
>>681
プラットフォームによってはバグってたりするから使わない方がいいよ
追加できるエントリ数にこっそり上限があったり

683:デフォルトの名無しさん
05/04/05 10:51:56
program_a が program_b を呼び出すようにしています.
gdb で program_b の動作をデバッグするには
どうすればいいのでしょう?


684:デフォルトの名無しさん
05/04/05 11:15:04
>>683
program_b の最初の辺りに sleep なり, 入力待ちなりを入れといて,
ps | grep program_b して gdb <pid-of-program_b> する.
どっちかってゆうと, ウニ板のくだ質ネタだが...


685:デフォルトの名無しさん
05/04/05 12:09:45
>>683
"program_b arg1 arg2"

"gdbserver localhost:20000 program_b arg1 arg2"

$ gdb
gdb> target remote localhost:20000
gdb> break xxx
gdb> continue

686:デフォルトの名無しさん
05/04/05 21:37:03
Windowsみたいにcch埋め込みして自動でデバッガ起動とかできないの?

687:デフォルトの名無しさん
05/04/05 21:47:46
core吐いたら、そこからデバッグを再開出来る気もする

688:デフォルトの名無しさん
05/04/06 00:02:56
>>686
こんな感じでいいのか?
以下を実行すると、自身を対象にgdbのウィンドウが立ち上がる。
char pidbuf[20];
snprintf(pidbuf, sizeof pidbuf, "%d", getpid());
if (fork() == 0)
   execlp("xterm", "xterm", "-e", "gdb", argv[0], pidbuf, NULL);
sleep(5); /* wait for gdb */
かなーりいい加減な実装だけど。


689:デフォルトの名無しさん
05/04/06 10:45:22
Unixプログラミングを詳しく
網羅した質の高いサイトを
この俺に教えてください

690:デフォルトの名無しさん
05/04/06 11:05:39
URLリンク(www.adl.nii.ac.jp)

691:デフォルトの名無しさん
05/04/06 15:24:06
CSVをパースするライブラリくれ
書くのめんどい

つーか、どう考えても世の中に大量にあるだろそんな汎用ライブラリ
どうしてgoogleで引っかからないんだこれ
だれかの陰謀か? 宇宙人?

692:デフォルトの名無しさん
05/04/06 15:26:47
>>691
perl >>>>>>>>>>>>>>>>>>>> ruby
URLリンク(search.cpan.org)

693:デフォルトの名無しさん
05/04/06 16:41:41
> perl >>>>>>>>>>>>>>>>>>>> ruby
> URLリンク(search.cpan.org)

まぬけですね

694:デフォルトの名無しさん
05/04/06 17:24:05
> > perl >>>>>>>>>>>>>>>>>>>> ruby
> > URLリンク(search.cpan.org)
>
> まぬけですね

まぬけですね

695:デフォルトの名無しさん
05/04/06 17:36:22
Cでくれ

696:デフォルトの名無しさん
05/04/06 17:52:29
一発動かすだけみたいなやつなら perl で十分だろうし、
そうでないなら...

> 691 名前:デフォルトの名無しさん[] 投稿日:2005/04/06(水) 15:24:06
> CSVをパースするライブラリくれ

> 695 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/06(水) 17:36:22
> Cでくれ

この間になんぼでも書けるだろう。

697:デフォルトの名無しさん
05/04/06 18:28:29
C--  (C Decre)

698:デフォルトの名無しさん
05/04/06 21:04:08
>>691
何故みつからないかというと、みんなが納得する"CSV"という
名前のフォーマットは存在しないからです
標準化されていない悲しさよ

699:デフォルトの名無しさん
05/04/06 21:24:12
そんなことなかろう。
google で
"comma separated value" parse library
を検索すると見つかるぞ。
単に探し方が悪いだけだと見た。


700:デフォルトの名無しさん
05/04/06 23:00:19
CSVって、
・フィールド,で区切られている。
・#から改行までは無視。
・,#をデータに入れたい時は、"tell your #, please!"とクォート。
・レコードは改行で区切られている。
が典型的かな。

>>698
色々と問題が起きそうなのは、
・改行コード。
・ISO-2022-JPの様な左面の文字集合切り替えのある場合。
かな。


701:デフォルトの名無しさん
05/04/06 23:08:41
>>700
> ・,#をデータに入れたい時は、"tell your #, please!"とクォート。
マジかよ
そんなエスケープ初めて聞いた

702:デフォルトの名無しさん
05/04/07 09:11:15
CSV

・1行で1レコード。
・コンマ「,」をデリミタとして値を区切る。
・値にコンマが含まれているときにはダブルクォート「”」で括る。
・値にダブルクォートが含まれているときは「””」と2重にする。


多少の方言はあるけど、だいたいこんなんが基本。
というのが漏れの理解。

703:デフォルトの名無しさん
05/04/07 09:41:22
値に「"」が含まれていたら「''」でクォートとか、「\」でエスケープとか、
文字列フィールドに数字しかないときは「'」が先行するとか、
微妙にいやらしい方言が多いんだよね。

704:デフォルトの名無しさん
05/04/07 10:12:33
だからライブラリが無いw

705:デフォルトの名無しさん
05/04/07 12:35:08
""の中に改行が含まれるケースもある

1,"abc","def",ghi,1111
2,"abc","This is a quoted
string.",def,234
3,"abc
def","hoghoge",aaa,234

みたいな

706:デフォルトの名無しさん
05/04/07 14:22:07
>>705
lex 辺りでアナライザーはかせりゃ, 悩むほどのもんじゃねぇだろ?
あとは, yylex 呼ぶループ書くだけ.


707:デフォルトの名無しさん
05/04/07 14:30:47
この程度、lex 使わずに手書きしても全然たいしたことない。
この程度が書けないような香具師は、Cを使うのはやめて、
Java とか Perl とか Python とか Ruby とか VB に転向すべき。

708:デフォルトの名無しさん
05/04/07 14:32:23
Perl なら
URLリンク(www.din.or.jp)
PHP なら
URLリンク(jp.php.net)
があるけどね

709:デフォルトの名無しさん
05/04/07 15:00:15
メールサーバでReceived:の項にJSTなどとタイムゾーンが文字で入りますが、あれは取得できる物なのでしょうか?
それとも、メールサーバのプログラムの中にそのようなテーブルがあるのでしょうか?

710:デフォルトの名無しさん
05/04/07 15:02:40
>>707
> この程度、lex 使わずに手書きしても全然たいしたことない。
ゴリゴリ手書きして遅いルーチンを書くのはいとも簡単だけど、
(f)lexと同等かそれ以上に高速なものにしようとすると結構大変かも。


711:デフォルトの名無しさん
05/04/07 15:04:59
>>709
echo $TZ

712:デフォルトの名無しさん
05/04/07 15:06:37
echo OTZ

713:デフォルトの名無しさん
05/04/07 15:36:01
>>710
トークンの種類が非常に多く、DFAのメリットが効いてくる
ような場合なら、確かに (f)lexの方が速くなるが、この例
だと共通プレフィックスになるような文字列は全くないので、
まともなプログラマが書けば、どう転んでも手書きの方が速い。
もちろん、まともじゃないプログラマなら話は全然別。

714:デフォルトの名無しさん
05/04/07 16:01:55
>>713
へっ?字句解析でDFAの表引きが効率向上に役立つ割合なんてほんの僅かです
が。字句解析器生成が手書きよりもうれしいのは、まず第一にバッファリング
(と先読み管理)をそれなりにきちんとやってくれるからですけど。もちろんき
ちんと最適化したマニュアルの解析器の方がバッファリングも速いけど、それ
はそれで「どう転んでも」速くなるほど自明じゃない。


715:デフォルトの名無しさん
05/04/07 16:12:37
うーん、ほとんどの言語は、そもそもそんな高度な
バッファリングなんていらないでしょ? 一文字バッ
ファリング、すなわち ungetc() で十分なことが
多いと思うけど。そりゃたまには、そうじゃない
変態文法もあるけどさあ。
今回の CSV も ungetc() で十分なので、バッファ
リングで遅くなる要素は、まったくないと思うけど?

716:デフォルトの名無しさん
05/04/07 18:08:46
おまいらは読込速度が問題になる程
大量の CSV を読もうとしてるのか…ッ!

こないだいたけどね。
「いやー Excel で開けないくらいでっかくなっちゃいましたよハッハッハ」
とかいうから、行数カウントしてみたら 1200万行。

717:デフォルトの名無しさん
05/04/07 18:54:46
そこまで多くなったらDB使えと小一時間(ry

718:デフォルトの名無しさん
05/04/07 20:36:51
CSVやめてS式にしようぜ

719:デフォルトの名無しさん
05/04/07 21:00:27
字句解析器がバッファリングをするって何の話だよ??

720:デフォルトの名無しさん
05/04/07 21:21:46
UNIXプログラミングに関係ないはなししはよそでおねがいします。

721:デフォルトの名無しさん
05/04/07 21:53:30
XMLに決まってんジャンww

722:デフォルトの名無しさん
05/04/08 00:09:41
LALRのLAじゃないの?>バッファリング

723:デフォルトの名無しさん
05/04/08 00:40:39
LALR使ってるのはlexじゃなくてyaccでそ。

724:デフォルトの名無しさん
05/04/08 01:39:56
Unix でプログラミングなら, あるもの使えば?
車輪の再発明の必要もないし...
ってな, つもりで >>706 を書いたんだが, 妙なことになってるしorz

>>720
> UNIXプログラミングに関係ないはなししはよそでおねがいします。
おもいっきり, UNIXプログラミングの*はなしし*だと思うが...
つか, UNIXプログラミングの*はなしし*をすれば, この程度は普通
だと思うぞ.


725:デフォルトの名無しさん
05/04/08 03:10:14
>>720 はCSVがUNIXに関係ないと思ってる香具師


726:デフォルトの名無しさん
05/04/08 03:38:49
>>709
fURLリンク(elsie.nci.nih.gov)

727:デフォルトの名無しさん
05/04/08 03:39:31
>>709
URLリンク(david.tribble.com)

728:デフォルトの名無しさん
05/04/08 09:32:37
>>725
関係無いだろ

729:デフォルトの名無しさん
05/04/08 11:46:01
yacc/lexがなきゃCSV も読めないのか、ここの連中は(笑)
火炎放射器でタバコに火を付けるってのはこういうのを言うのかね。

730:691
05/04/08 13:46:41
そういうのを自分で作るのが面倒だという話なんだ
誰かが作ったものがそこらに転がってるなら
火炎放射器でもなんでも使うよ。

731:デフォルトの名無しさん
05/04/08 14:42:40
cut(1) ですむところを awk や perl でやったりもするけど別にええやん

732:デフォルトの名無しさん
05/04/08 14:50:36
awkは兎も角、perlは…
まぁいいか。

>>730
火炎放射器使うくらいなら私は自分で火を熾すよ。

733:デフォルトの名無しさん
05/04/08 14:58:36
>>732
> 火炎放射器使うくらいなら私は自分で火を熾すよ。
野蛮だなw

734:デフォルトの名無しさん
05/04/08 15:14:19
火炎放射器を使う方がむしろ野蛮だと思いまつ。
つうか、これぐらい単純な処理だと、lex使う方
がむしろ面倒だと思う。

735:デフォルトの名無しさん
05/04/08 15:50:40
簡潔な方法が正解かと

736:デフォルトの名無しさん
05/04/08 16:11:18
simple is beauty が UNIX

737:デフォルトの名無しさん
05/04/08 18:39:06
なんだよお前らそんなに車輪作りたいのか?
おれはやだぜ

738:デフォルトの名無しさん
05/04/08 18:50:53
任意個の整数の合計を求めるライブラリくれ
書くのめんどい

つーか、どう考えても世の中に大量にあるだろそんな汎用ライブラリ
どうしてgoogleで引っかからないんだこれ
だれかの陰謀か? 宇宙人?


739:デフォルトの名無しさん
05/04/08 18:55:42
そんなのライブラるまでもないからだろ

740:部外者でけどね
05/04/08 19:24:44
こんなのは setjump / longjump のいい練習になるかな。遊びでつくてみよ。

741:デフォルトの名無しさん
05/04/08 19:32:59
>>740
整数の合計を求めるのにsetjump/longjump?

>>739, >>738
std::accumulate()

742:デフォルトの名無しさん
05/04/08 19:39:11
Cでくれ

743:デフォルトの名無しさん
05/04/08 20:18:25
>>738=740はただの初心者

744:デフォルトの名無しさん
05/04/08 20:23:22
#define goukei(arr) { int i; extern int g_goukei; for(i=0, g_goukei; i<sizeof(arr)/sizeof(arr[0]); i++) g_goukei+=arr[i]; }

745:デフォルトの名無しさん
05/04/08 20:27:16
UNIXでまともな言語ってJavaぐらいしかない

746:デフォルトの名無しさん
05/04/08 23:34:30
はつみみです

747:デフォルトの名無しさん
05/04/10 18:06:28
>>737
自分の回りに車輪が見当たらなければ作るしかねーだろが。

748:エラー処理ブッチご容赦
05/04/10 23:57:43
>>740
#include <setjmp.h>
#include <stdio.h>

void acc1(int n, int x, jmp_buf env) {
  if (n == 0) { longjmp(env, x); }
  else { acc1(n - 1, n + x, env); }
}

int acc(int n) {
  jmp_buf env; int x;
  if (n == 0) { return 0;}
  else if (x = setjmp(env)) { return x; }
  else { acc1(n, 0, env); }
}

int main(int argc, char *argv[]) {
  printf("%d\n", acc(atoi(argv[1])));
}


749:デフォルトの名無しさん
05/04/11 08:01:46
誰か、>748が何をしたいのか教えてくれ。

750:デフォルトの名無しさん
05/04/11 08:30:25
>>749
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv) {
printf("%d\n", atoi(argv[1]) * (atoi(argv[1]) + 1) / 2);
return 0;
}


751:デフォルトの名無しさん
05/04/11 09:27:35
やあおまいら。C言語の勉強ははかどってるかね?

752:デフォルトの名無しさん
05/04/11 09:39:22
>>750
それのどこが「任意個の整数の合計」なんだか。
つーか、>740=>748が阿呆なだけか。

753:仕様書無しさん
05/04/19 00:40:02
>>740
setjmp 使ってなくてすまん。

int
summers (int n, ...)
{
 va_list ap;
 int i = 0, sum = 0;

 va_start (ap, n);
 while (i++ < n)
  sum += va_arg (ap, int);
 va_end (ap);

 return sum;
}


754:デフォルトの名無しさん
05/04/19 20:26:29
だめだよぉ
setjmp使わなきゃ

755:デフォルトの名無しさん
05/04/21 15:45:47
Linux です.
ある実行ファイルを実行している最中で,
このファイルを open することはできますか?


756:デフォルトの名無しさん
05/04/21 15:48:58
>>755
自分で試せ。

757:デフォルトの名無しさん
05/04/21 15:50:00
>>755
こんにちはLinuxさん

758:デフォルトの名無しさん
05/04/21 15:50:17
>>755
このファイルとは、実行中の実行ファイルのことでしょうか。
それなら制限つきでopenできるはずです。

759:デフォルトの名無しさん
05/04/21 15:56:14
>>758
制限って?

760:755
05/04/21 16:13:06
説明が足りませんでした

ある実行可能ファイルを open したところ
失敗して,strerror(errno) したところ

Text file busy

とでるんです(バイナリファイルなのに…)

これはそのファイルが実行中と解釈していいのでしょうか?

761:デフォルトの名無しさん
05/04/21 16:38:39
>>760
LinuxさんはどんなUNIXを使ってらっしゃるんで?

762:デフォルトの名無しさん
05/04/21 17:05:16
書き込みモードで開こうとしてない?

あと text はコードというような意味。
バイナリファイル/テキストファイルというような区別はUnixにはない。

使用中なのは確かだけど実行中かどうかは知らん。

763:デフォルトの名無しさん
05/04/21 17:07:06
Text file busy どこで拾ってきたLinuxなんだろ

764:デフォルトの名無しさん
05/04/21 17:15:21
少なくとも BSD 系では errno 26 は "Text file busy."

765:755
05/04/21 17:18:53
いろいろどーもす
参考になりますた

> errno 26 は "Text file busy."

Linux でも同様です

766:758
05/04/21 18:28:40
>>759
既に答えが出ているからいいよね。
fopen("実行モジュール", "w");
とすると楽しいことになる。

767:デフォルトの名無しさん
05/04/21 20:41:01
>>766
そんなもん想定の範囲内だが?

768:デフォルトの名無しさん
05/04/21 20:47:43
楽しかった!
もっとやって!

769:デフォルトの名無しさん
05/04/21 23:40:28
Windowsのdllやexeは使用中に更新出来ないが
UNIXの実行ファイルは更新可能

770:デフォルトの名無しさん
05/04/21 23:43:56
実行中に削除って…なんか指令を伝えた後に爆発するレコードみたいだな

771:デフォルトの名無しさん
05/04/22 00:20:08
プロセス終了時にコア吐くですよ。

772:__
05/04/22 00:40:24
>>760
んー、こういうことかな?

#include <stdio.h>

int
main (int argc, char **argv)
{
 FILE *fp;

 if ((fp = fopen (argv[0], "w")) == NULL)
  perror ("fopen"), exit (1);

 fclose (fp);

 return 0;
}

$ gcc -Wall -o Text Text.c
$ ./Text
fopen: Text file busy
$

773:デフォルトの名無しさん
05/04/22 09:39:12
>>772
良い例です(笑)。細かな事ですが、コマンド名には大文字を入れないのが慣習です

774:デフォルトの名無しさん
05/04/22 11:36:45
select でパイプからの入力待ちをしたのですが
待ち時間を 10 秒とかにしているのに
すぐに 0 が返ってきます

時間切れ以外に 0 が返ってくる場合はありえるのでしょうか?

man select には時間切れと書いていますが

775:デフォルトの名無しさん
05/04/22 11:54:38
タイムアウトの指定の仕方が間違っている!(w

776:デフォルトの名無しさん
05/04/22 12:18:55
>>774
待ち時間の設定から呼び出しまで辺りのソースを晒して味噌。

777:デフォルトの名無しさん
05/04/22 20:23:18
会社のソースなので外部に持ち出せません
契約違反になります

778:デフォルトの名無しさん
05/04/22 20:26:26
バイバイ

779:__
05/04/22 20:54:02
>>777
へたれよのぅ。


780:デフォルトの名無しさん
05/04/23 05:05:53
それ以前にそんな奴が2chで質問するなと。


781:デフォルトの名無しさん
05/04/25 11:15:17
とあるプログラムをつくっていて

(1) Redhat 7.1
(2) Redhat EL WS

で動作が違いました.
すでに実行中のファイルを書きこみ専用で
open しようとしたときに
(1)では成功,(2)では失敗します.

このようなことはありえますでしょうか?
これは OS 自体の設定の違いによって起こるものなのでしょうか?

また,ファイルパスを指定して,
それが実行中かどうかを知る方法(もちプログラムの中で)は
ありますか?


782:デフォルトの名無しさん
05/04/25 11:54:35
その辺はLinux板だなあ。UNIX一般の問題じゃないから。

execve(2)した時の、O_EXEC, MAP_DENYWRITE関係の設定が変ったんだろ。
書けるとsecurity holeになるからね。十分あり得る。

$ cat /proc/プロセスID/maps

してみてね。



783:デフォルトの名無しさん
05/04/25 12:42:32
>>782
本当にそうなら、これでまたひとつWindowsに近づいたな。

784:781
05/04/25 12:48:45
失礼しますた
Linux 板にいてきます

785:782
05/04/25 12:55:58
>>783
遠退いたんでしょ?

786:デフォルトの名無しさん
05/04/29 16:02:44
サーバのプログラムはアイドル時どのように、待っているのでしょうか?
sleepを入れながらポーリングするのでしょうか?


787:デフォルトの名無しさん
05/04/29 16:06:08
何するものかによって違うけど、普通は select とかだろうね。

788:デフォルトの名無しさん
05/04/29 16:09:48
>>786
ポーリングでしか分からないのなら、それもあり。
でも定期的に無駄にCPU使うので、可能なら
accept なり、read なりでイベント待ちするのが普通


789:デフォルトの名無しさん
05/05/01 10:11:26
Linuxでのプログラミング学習です。
こんな問題をいきなり授業で出題されました。
まだほとんど何もやってないので、さっぱり
意味が分かりません。分かる方がいらっしゃるなら、
回答の方教えてはいただけませんか?



f(x)=xの2乗-xy-yの2乗 について
x=-0.423 y=1 の時の値を(小数点第4位までの表示)
で求めなさい。ただし、変数x,yの値はscanf文で
入力させてください。


790:デフォルトの名無しさん
05/05/01 10:15:54
アナタとワタシはスレ違い。

791:デフォルトの名無しさん
05/05/01 10:20:48
GTK プログラミング!!
で聞けばいいんですかね?

792:デフォルトの名無しさん
05/05/01 10:37:11
>>789
perl -e '$x=scanf();$y=scanf();printf "%.4f\n",$x**2-$x*$y-$y**2;sub scanf {<>}'

793:デフォルトの名無しさん
05/05/01 11:20:35
>>789
お好きなところへどうぞ。
スレリンク(tech板)
スレリンク(tech板)

794:デフォルトの名無しさん
05/05/01 12:11:43
ありがとうございました

795:从*・ 。.・) ◆SayuminPM.
05/05/01 21:46:42
Advanced Programming in the UNIX(R) Environment (2nd Edition)
URLリンク(www.amazon.com)

みんな予約した?

796:デフォルトの名無しさん
05/05/01 22:50:17
そんな消え行く過去の遺産の本はもういらん
第1版で十分

797:デフォルトの名無しさん
05/05/01 23:19:31
”そんな消え行く過去の遺産の” と "はもういらん"
は不必要

798:デフォルトの名無しさん
05/05/01 23:38:03
今住んでいるところで現物見れそうもないんで、
とりあえずレビューされてから考えようかな、と。
第1版は持ってるし。エラッタ修正待ちも兼ねて。


799:デフォルトの名無しさん
05/05/01 23:42:31
>>797

第1版で十分

800:デフォルトの名無しさん
05/05/02 00:07:33
$ cat >>799 | grep "で" | awk -F'版|十' '{ print $2"?" }'

801:デフォルトの名無しさん
05/05/02 00:26:02
ワロタ

802:デフォルトの名無しさん
05/05/02 00:45:05
>>800
>799は>797の指示に従ったんだろ。

803:デフォルトの名無しさん
05/05/02 00:54:40
>>798
×エラッタ
○イレイタ
○エラータ

804:デフォルトの名無しさん
05/05/02 03:53:51
もはやカタカナ表記はエラッタでいいんじゃないの?
UNIXをユニックスと書くやつはいてもユーニクスとは誰も書かないのと同じで。

803は現代日本で生きるのは大変そうだな。
明治時代なら好きな読みを押し付けられたのに。



805:デフォルトの名無しさん
05/05/02 03:59:28
>>804はアイロンとか使えないんだよ。

806:デフォルトの名無しさん
05/05/02 04:20:02
急速にスレの質が低下してまいりました

807:デフォルトの名無しさん
05/05/02 19:52:24
いや、最初からこんな感じだったよ

808:デフォルトの名無しさん
05/05/02 19:56:03
バケラッタ

809:デフォルトの名無しさん
05/05/04 16:07:05
c++(gcc)での実行ファイル名(つまり自分自身のファイル名)の取得方法を教えてください


810:デフォルトの名無しさん
05/05/04 16:07:46
argv[0]

811:デフォルトの名無しさん
05/05/04 16:12:01
このスレにあったような。

812:デフォルトの名無しさん
05/05/05 23:01:54
質問です。

fork/execして生まれた子が親の死を感知する方法で一般的な
方法はあるのでしょうか?(initに引き取られると困る)

調べると「システムによってはSIGHUPが...」とかという記述で
一般的な方法は見つかりませんでした。

もちろん、「そんな親プログラムを作るな」というのは承知しているのですが...


813:デフォルトの名無しさん
05/05/05 23:17:20
ないんじゃないでしょうか。
どうしても知りたければお爺さんプロセスから教えてもらうようにするとか。
ちなみにSIGHUPは親プロセスの死とは直接関係ないですよ。



814:デフォルトの名無しさん
05/05/05 23:38:01
ncursesを使ったソースでなるべくシンプルなものってないでしょうか
お手本にしたいのですが

815:デフォルトの名無しさん
05/05/05 23:43:53
$ cd ncurses-5.4/test
$ ls
Makefile.in README aclocal.m4 background.c blue.c
bs.6 bs.c cardfile.c cardfile.dat color_set.c
configure* configure.in demo_defkey.c demo_forms.c demo_keyok.c
demo_menus.c demo_panels.c ditto.c dots.c edit_field.c
edit_field.h filter.c firework.c firstlast.c gdc.6
gdc.c hanoi.c hashtest.c ins_wide.c inserts.c
keynames.c knight.c listused.sh* lrtest.c modules
ncurses.c ncurses_tst.hin newdemo.c railroad.c rain.c
tclock.c test.priv.h testaddch.c testcurs.c testscanw.c
tracemunch* view.c worm.c xmas.c


816:デフォルトの名無しさん
05/05/06 00:17:10
>>812
親のみが書き手、子が読み手のpipeを用意する。
親が死んだら子によるread(2)の返り値が0になるはず。

とか。一般的かどうかは知らない。

817:812
05/05/06 00:35:30
>>813
>>816
レスありがとうございます。やはり一般的な方法はないですか・・・
パイプとかPID監視とかの代替案を使うことにします。

818:デフォルトの名無しさん
05/05/06 01:09:12
>>812
> (initに引き取られると困る)

ここが引っ掛かっていてスルーしていたんだけど、
これどういう意味なの? 何が困るの?

pollingでいいなら、IPCのセマフォ使うとか。

819:デフォルトの名無しさん
05/05/06 01:17:25
URLリンク(p231.net220148094.tnc.ne.jp)
wwwwwwっwwwwwwっうぇwwwwwwwwwwww
wwwうぇwwwうはっwwwっ
おkwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwww

820:デフォルトの名無しさん
05/05/06 03:26:12
>>812
kqueue/keventがあるOSなら任意のpidのexitしたのがわかる。

821:デフォルトの名無しさん
05/05/06 06:08:03
>>812
適当にシグナル投げてみるとかは?

822:デフォルトの名無しさん
05/05/06 06:24:26
>>821
能動的にアクション起こしていいんなら getppid()!=1 で十分だろう

823:デフォルトの名無しさん
05/05/07 02:48:42
wchar_t wb[] = L"ほげ";
printf("%S",wb);

wchar_t wb[20];
initscr();
getn_wstr(wb, 20);
printw("%S",wb);
は問題なし
wchar_t wb[] = L"ほげ";
initscr();
printw("%S",wb);

^[$B$[$2^[(B
こんな風に表示されてしまう
setlocale(LC_ALL, "");してみても変化無し
何が足りないんでしょう


824:デフォルトの名無しさん
05/05/07 03:05:39
シェルで日本語出すように設定してないだけじゃねーの?

825:デフォルトの名無しさん
05/05/07 07:14:54
出力はISO-2022-JPに見える。
ターミナルのlocaleはそれでいいのか?

826:デフォルトの名無しさん
05/05/07 18:29:50
>>822
getppidなんてはじめて知った
おくがふかいなぁ

827:デフォルトの名無しさん
05/05/10 07:09:50
プロセス間でデータをやりとりするにはどうしたらよいのでしょうか?
WindowsにおけるWM_COPYDATAのような方法を探しているのですが。

828:デフォルトの名無しさん
05/05/10 08:35:35
親子、あるいは親戚関係にあればpipe(2)、
そうでなければmmap(2)、IPC共有メモリなど。

829:デフォルトの名無しさん
05/05/10 16:03:44
Xwindowで動作するプログラムを作りたいのですが、どこから勉強していけばよいのでしょうか?
C++でコマンドラインプログラムは書けます。

830:デフォルトの名無しさん
05/05/10 17:30:24
今さらXlibでもあるまいから、まずは使うGUIツールキットを決めなされ。
多分GTK+かQtのどちらかになると思うけど。決まったらそのスレへgo!


831:デフォルトの名無しさん
05/05/10 20:00:24
widestudio とかもあるよ

832:デフォルトの名無しさん
05/05/10 20:02:45
最近良く見かけるが、WideStudio の中の人は 2ch で宣伝する方針なのか?

833:デフォルトの名無しさん
05/05/10 20:26:28
Motifを忘れているよ。
UNIXなら標準だし、ついでにXlibにも詳しくなる。

834:デフォルトの名無しさん
05/05/10 20:30:23
いつのまに標準になってたのか

835:デフォルトの名無しさん
05/05/10 20:46:32
Motifはどさ回りの仕事量が増えるけどねぇ。
ツールキットとしては古くて資料も色々あるけど。
それにしても、関数名が長いし。
#XmToggleButtonGadgetGetState()とかw

836:デフォルトの名無しさん
05/05/10 20:59:48
>>833
>ついでにXlibにも詳しくなる。
詳しくないと使えないっつーか
だから避けられるんだっつーか

…折れ線グラフひとつ書くのも一苦労でしたよ、ええ。

837:デフォルトの名無しさん
05/05/11 00:27:26
C++だからQtかgtk--のどちらかだろう。
俺としてはmoc拡張の必要のないgtk--を推奨。

URLリンク(www.geocities.com)
↑を眺めてみるのもよし

838:デフォルトの名無しさん
05/05/12 23:46:19
おれならまずXでGUIアプリなんて作らないな

839:デフォルトの名無しさん
05/05/14 03:01:37
あるプロセスIDのプログラムが実行中かそれとももう終了したのかを確認するにはどうしたらよいのでしょうか?

840:デフォルトの名無しさん
05/05/14 03:31:32
詳解Unixプログラミングを読むのが一番早い。

841:デフォルトの名無しさん
05/05/14 04:19:01
それくらいならFAQにも出てたと思う。


842:839
05/05/14 04:48:27
/procディレクトリの中のPIDと同じファイルが存在すれば、実行中であると判断しても問題ないでしょうか?
実行が終了すれば必ず消えるものなのでしょうか?

843:デフォルトの名無しさん
05/05/14 06:18:25
kill 839


844:デフォルトの名無しさん
05/05/14 06:20:14
>>839
kill(pid, 0)

845:デフォルトの名無しさん
05/05/14 06:20:43
間違えた。

kill(839, 0)


846:デフォルトの名無しさん
05/05/14 06:36:23
まあ、FAQによれば
killよりも/procの方が確実に判定できるケースがあるとのことだから
そのやり方について聞いているんだろう。
実装(環境)依存としか答えようがなさそうだけど。

関係ないけど、「実行中である」という確実な判定は不可能だな。
なんらかの呼び出しから制御が戻る前に終了する可能性がある。
PIDの唯一性(再割り当てされないこと)が保証されていれば
「終了した」ということは判定できるだろうけど。

847:デフォルトの名無しさん
05/05/14 06:39:19
fork() 関数で子プロセスを生成しました。
親プロセスは、一秒に一回ぐらいの間隔で、子プロセスが終了してるかどうかを確認したいのです。
その間、親では

while(1){
子プロセスの終了してるか監視 終了してれば、処理を抜ける
メータ表示
}
などのプログラムを動かしたいと思っています。


いろいろ調べたんですがwait()関数なるものが子プロセス終了まで待ちつづけるというものでしたので、子プロセスが動いている間
メータを動かすという処理が出来ませんでした。

子プロセスは、system関数で、別のプログラムを実行しています。
その間、親プロセスで、メータを増やす処理をしたいのですが、子プロセスが終了?してるか調べるwait関数に変わるものは何かあるのでしょうか?

ps -aux で確認したところ、子プロセスの処理が終わったらゾンビプロセスになってました;

848:デフォルトの名無しさん
05/05/14 06:56:45
おまえはタイトルも>>1も読まないだけでなく
最近の10レスも読まないのな

849:デフォルトの名無しさん
05/05/14 07:41:43
>848
別のスレでもご迷惑をかけました

勝手に書き込んで荒らしてしまって、
すみませんでした自分で調べてみます。

申し訳ありませんでした。


>おまえはタイトルも>>1も読まないだけでなく
>最近の10レスも読まないのな

これからは、すべて読んでから書き込みます。
すいませんでした。


850:デフォルトの名無しさん
05/05/14 07:43:25
なんで伝統伝説のUNIX板に聞かないの?

851:デフォルトの名無しさん
05/05/14 08:16:29
UNIX板気持ち悪いので

852:デフォルトの名無しさん
05/05/14 09:54:10
>>847
wait3(2)かwait4(2)で、WNOHANG


853:デフォルトの名無しさん
05/05/14 13:02:59
busy loopなんかするな馬鹿

854:デフォルトの名無しさん
05/05/14 21:11:45
>>847
なんだそれは?その子プロセスは直接の子では無いではないか。
素直にAPUEを嫁

855:デフォルトの名無しさん
05/05/14 21:15:06
メータって。プログレスバーじゃねぇの?

856:デフォルトの名無しさん
05/05/14 22:40:27
sleepをミリ秒単位で実行する方法を教えてください

857:デフォルトの名無しさん
05/05/14 22:59:42
>>856
usleep

858:デフォルトの名無しさん
05/05/14 23:03:30
>>857
ありがとう

859:デフォルトの名無しさん
05/05/14 23:09:50
>>856
nanosleep

860:デフォルトの名無しさん
05/05/14 23:57:59
select

861:デフォルトの名無しさん
05/05/15 11:17:57
社のUNIX遣いの口癖が「だからぁ、子を先に殺すんだよw」なんです。いつも半笑いで。


通報したほうがいいですか?

862:デフォルトの名無しさん
05/05/15 12:15:06
つまらん。勝手にすれば。


863:デフォルトの名無しさん
05/05/15 13:05:55
あひゃひゃ

864:デフォルトの名無しさん
05/05/15 13:33:11
CPUの個数を取得する方法を教えてください

865:デフォルトの名無しさん
05/05/15 15:41:24
ケースの蓋を開けて目視で確認してください

866:デフォルトの名無しさん
05/05/15 15:52:40
最近は目視じゃ不十分だな

867:デフォルトの名無しさん
05/05/15 15:54:26
BSD系だと sysctl でわかったりする。
Linuxは知らないけど /proc の下あたりになんかあるんじゃ?
いずれにしても移植性はないと思う。

868:デフォルトの名無しさん
05/05/15 16:58:19 BE:50674853-
/proc/cpuinfo

869:デフォルトの名無しさん
05/05/15 17:16:43
HTだとわからんな

870:デフォルトの名無しさん
05/05/16 01:38:20
HTでも/proc/cpuinfoに出るぞ

871:デフォルトの名無しさん
05/05/16 02:05:21
UNIXでWindowsのDLLの動的ロードのようなことはどのようにやるのでしょうか?

872:デフォルトの名無しさん
05/05/16 02:13:11
>>871
dlopenとかの事?

873:デフォルトの名無しさん
05/05/17 02:49:38
UNIXでWindowsのDLLのDllMainのようなことはどのようにやるのでしょうか?


874:デフォルトの名無しさん
05/05/17 02:52:05
どういう挙動を望んでいるのかをなぜ自分で説明しないのだろうか?


875:デフォルトの名無しさん
05/05/17 07:14:10
man dlopenすれば馬鹿でも分かるように書いてある。

876:デフォルトの名無しさん
05/05/17 07:33:33
dll自体はどのように書けばよいのでしょうか?

877:デフォルトの名無しさん
05/05/17 08:04:37
URLリンク(www.linux.or.jp)

878:デフォルトの名無しさん
05/05/17 08:07:35
URLリンク(www.linux.or.jp)

879:デフォルトの名無しさん
05/05/17 08:18:47
リンクをはるだけならバカでもできますが何か。

880:デフォルトの名無しさん
05/05/17 08:29:00
おー、ここから来たのかと思っちゃったよ。
スレリンク(news4vip板)

881:デフォルトの名無しさん
05/05/17 23:47:58
↑典型的なUNIX脳

882:デフォルトの名無しさん
05/05/18 10:48:05
CPU使用率の取得方法を教えてください

883:デフォルトの名無しさん
05/05/18 14:57:59
>>882
getloadavg(3)

884:デフォルトの名無しさん
05/05/18 15:01:00
sshでリモートコンピュータにログインして、コマンドを実行するにはどのようにしたらよいのでしょう?

885:デフォルトの名無しさん
05/05/18 15:08:33
>>882
使っているCPUの数 ÷ 所有しているCPUの数 × 100


886:デフォルトの名無しさん
05/05/18 16:30:45
>>883 どうやってそういうの見つけるの?

887:デフォルトの名無しさん
05/05/18 16:33:08
>>886
経験を積む

888:デフォルトの名無しさん
05/05/18 17:39:04
マニュアルを読む。
kmem, /proc関係

$ cat /proc/loadavg


889:デフォルトの名無しさん
05/05/18 20:29:09
getloadavgは一部のOSにしか実装されていないはず。

HP-UXだったら、pstat(2)(pstat_getdynamic(2)だったかな)。
Tru64 UNIXだったら、table(2)。

890:デフォルトの名無しさん
05/05/18 21:37:02
>>886
header を grep すれば大抵ポインタが見つかる

891:デフォルトの名無しさん
05/05/18 22:41:24
コマンド名もわからないのにヒットするわけねーじゃんヴォケ

892:デフォルトの名無しさん
05/05/18 22:47:00
何のコマンド名だよ

893:デフォルトの名無しさん
05/05/18 22:57:33
Excelの表を印刷するコマンドありますか?

894:デフォルトの名無しさん
05/05/18 22:59:47
Mac かな?
要件が良く分からんが、スレチガイかと

895:デフォルトの名無しさん
05/05/18 23:45:45
>>886
同じことを実現しているコマンドを探すor思い出す→wとかuptime→
wのソースを見る→該当部分を探す→getloadavg発見→manで確認


>>889
どうせこんなくだらない質問するやつは犬厨あたりだろうから
getloadavgが無いシステムのことは考えなかった。補足サンクスコ

896:デフォルトの名無しさん
05/05/18 23:54:54
使用環境によって発想が変わって来るようだね

897:?
05/05/18 23:59:55
ソースはイカリ

898:ヽ(´ー`)ノ ◆.ogCuANUcE
05/05/19 00:01:41
>>886
$ man -k 'load average'
getloadavg (3)       - get system load averages    # (゚Д゚)!
tload (1)            - graphic representation of system load average
xload (1x)           - system load average display for X


899:デフォルトの名無しさん
05/05/19 01:11:50
load averageってCPU使用率のことだったんだ
ふーん

900:デフォルトの名無しさん
05/05/19 02:23:37
wcolor_set()で背景色と文字の色をセットしても再描画した部分しか適用されないみたいなんですが
うまく背景色で塗りつぶす方法って何かないでしょうか?


901:デフォルトの名無しさん
05/05/19 02:42:57
man redrawwin

902:デフォルトの名無しさん
05/05/19 08:00:00
redrawwinしてからリフレッシュしても文字を表示してる部分しか背景色が変わらないです
やり方がまずいんでしょうか

903:デフォルトの名無しさん
05/05/19 09:27:27
man touchwin

904:デフォルトの名無しさん
05/05/19 09:29:15
man clearok

905:デフォルトの名無しさん
05/05/19 11:56:28
touchwinもclearokも同じ結果になります
私の頭が悪いだけかもしれませんが・・・

906:デフォルトの名無しさん
05/05/19 13:49:19
# man -k 'load average'
sh: /unsafe/: No such file or directory
Error executing formatting or display command.
System command /unsafe/ exited with status 32512.
Segmentation fault (core dumped)

('・ω・`)

907:デフォルトの名無しさん
05/05/19 13:55:17
>>905
すべておまいが悪い

908:905
05/05/20 08:04:37
見当違いのことをずっとやってたことに気付いた(´・ω・`)

909:デフォルトの名無しさん
05/05/20 11:11:46
sshでファイルをコピーするプログラムはどのように作ればよいのでしょうか?
system()で作ってみたのですが、sshのパスワードの反応する部分がわかりません。


910:デフォルトの名無しさん
05/05/20 14:59:13
scp使え

911:デフォルトの名無しさん
05/05/20 18:24:00
X Window Systemでクリップボードをいじるにはどうしたらいいのでしょうか?
XmClipboard何とかという関数を使ってるんだが、
どうも動きがいまいちなんだが。

912:デフォルトの名無しさん
05/05/20 22:22:24
Windowsにしとけばそんな苦労は無いのに・・

913:デフォルトの名無しさん
05/05/21 10:35:04
Windowsにしなければ コンピュータウィルス は減っていくのに・・

914:デフォルトの名無しさん
05/05/21 10:43:18
コンピュータなんてなければみんな幸せなのに。。。

915:デフォルトの名無しさん
05/05/21 14:36:56
>>914
同意。だけどその種の発言はマ板で(ry


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5397日前に更新/215 KB
担当:undef