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
UNIXプログラミング質問すれ Part10
■ このスレッドは過去ログ倉庫に格納されています
1unco ◆manko/yek.
2011/04/18(月) 17:06:36.77568デフォルトの名無しさん
2013/06/22(土) 23:24:21.76 >>567
デフォルトというのは無いと思うよ。
デフォルトというのは無いと思うよ。
569デフォルトの名無しさん
2013/06/23(日) 02:19:26.06 >>564
echo -e "aaa\naaa"
echo -e "aaa\naaa"
570デフォルトの名無しさん
2013/06/23(日) 05:04:30.30 ヒアドキュメントってこういうやつね。
cat <<_END_ >test.txt
aaa
a a
_END_
cat <<_END_ >test.txt
aaa
a a
_END_
571デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN Linux で、Objective-C 使えますか?
572デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN573デフォルトの名無しさん
2013/10/23(水) 07:55:21.29 ハードリンクと違って、
シンボリックリンクはそれ自体がリンク情報を格納したファイルだとの事ですが
リンク情報ファイルとして直接見る(テキスト/バイナリエディタ)にはどのようにすればよいでしょうか?
シンボリックリンクはそれ自体がリンク情報を格納したファイルだとの事ですが
リンク情報ファイルとして直接見る(テキスト/バイナリエディタ)にはどのようにすればよいでしょうか?
574デフォルトの名無しさん
2013/10/23(水) 08:11:05.93 >>573
どのファイルシステムの話をしてんだよ。
どのファイルシステムの話をしてんだよ。
575デフォルトの名無しさん
2013/10/23(水) 09:04:19.27 環境は MacOS10.7 ファイルシステムは HFS+ ですが
ファイルシステムによって開き方が違うんですか?
ファイルシステムによって開き方が違うんですか?
576デフォルトの名無しさん
2013/10/23(水) 09:19:54.34 わかればよろしい
577デフォルトの名無しさん
2013/10/23(水) 10:02:16.47 >>575
http://www.wdic.org/w/TECH/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF
extではファイルにならないこともある。これを利用して高速なロックファイルとする方法あったね。HFS+はわかんないや。
http://www.wdic.org/w/TECH/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF
extではファイルにならないこともある。これを利用して高速なロックファイルとする方法あったね。HFS+はわかんないや。
578デフォルトの名無しさん
2013/11/02(土) 07:42:13.92579デフォルトの名無しさん
2014/03/04(火) 10:40:27.75 あらら随分と寂れちゃって
やっぱUNIX系でプログラムミングしようなんてヴァカは少ないんだろうな
やっぱUNIX系でプログラムミングしようなんてヴァカは少ないんだろうな
580デフォルトの名無しさん
2014/03/04(火) 10:44:38.16 馬鹿には無理
581デフォルトの名無しさん
2014/03/04(火) 12:47:00.64 「やっぱUNIX系でプログラムミングしようなんてヴァカ」という奴はいない
582デフォルトの名無しさん
2014/03/04(火) 13:49:03.30 >>579
んじゃ何でプログラミングするんだよ?
んじゃ何でプログラミングするんだよ?
583デフォルトの名無しさん
2014/03/05(水) 00:05:19.95 >>579
馬鹿には無理
馬鹿には無理
584デフォルトの名無しさん
2014/03/05(水) 03:25:53.72 わかればよろしい
585デフォルトの名無しさん
2014/03/07(金) 22:08:54.91 ユニックスでプログラミングとか真性のオタクだろw
586デフォルトの名無しさん
2014/03/08(土) 13:19:20.76 >>585
馬鹿には無理
馬鹿には無理
587デフォルトの名無しさん
2014/03/08(土) 14:07:00.70 まあプログラミング作業そのものはwin 上でおこなうけどな
588デフォルトの名無しさん
2014/03/10(月) 03:07:52.96 プログラミングする奴はゴロゴロいるけどプログラムミングはそうそういないな
589デフォルトの名無しさん
2014/03/10(月) 11:58:20.45 プログラムミングだからか、そりゃMinGWでやってりゃいらつくかもしれん
590デフォルトの名無しさん
2014/03/12(水) 19:32:04.52ID:cq0Wuml2 Program MinG
591デフォルトの名無しさん
2014/04/04(金) 11:37:49.40ID:+1zjSCgd 私は主にLinux上で、C/C++のプログラミングをするんですが、
Linux の システムコールや標準ライブラリ関数が、
スレッドセーフかどうかが公式マニュアル等には、
まず記述されていないことが多いです。
スレッドセーフでない関数をスレッドから使うと
おかしな動きになるんですが、
スレッドセーフかどうかがハッキリ記述されている例の方が
少ないです。
みなさんはどうしてますか?
Linux の システムコールや標準ライブラリ関数が、
スレッドセーフかどうかが公式マニュアル等には、
まず記述されていないことが多いです。
スレッドセーフでない関数をスレッドから使うと
おかしな動きになるんですが、
スレッドセーフかどうかがハッキリ記述されている例の方が
少ないです。
みなさんはどうしてますか?
592デフォルトの名無しさん
2014/04/04(金) 11:56:16.78ID:5os8VUT8 man pthreads
593デフォルトの名無しさん
2014/04/07(月) 00:41:04.44ID:JdSV9wAR システムコールはされてるだろ。glibcも。
594デフォルトの名無しさん
2014/04/08(火) 18:36:01.77ID:nqRQMd5J 質問です。
ネットワークAPIの略号はこんな感じでいいのでしょうか?
a : ascii
h : host
hs : host short
hl : host long
n : network or numeric
ns : network short
nl : network long
p : presentation (.で区切られたアドレスを文字列で表現)
aとpは同じ意味なのでしょうか?
nはnetworkと説明されていたり、numericと説明されているのですが、
どちらでもいいのでしょうか?
よろしくお願いいたいします。
ネットワークAPIの略号はこんな感じでいいのでしょうか?
a : ascii
h : host
hs : host short
hl : host long
n : network or numeric
ns : network short
nl : network long
p : presentation (.で区切られたアドレスを文字列で表現)
aとpは同じ意味なのでしょうか?
nはnetworkと説明されていたり、numericと説明されているのですが、
どちらでもいいのでしょうか?
よろしくお願いいたいします。
595デフォルトの名無しさん
2014/04/08(火) 19:06:15.00ID:XsPn59mL ???
596デフォルトの名無しさん
2014/04/08(火) 19:30:25.89ID:pfMGzHK8 >>594
まじれすすると
しいて言えばaがaddress、nがnetworkじゃ?
inet_addrとinet_networkがあるしな。
aがasciiじゃ使える文字の種類が多すぎだろw
aとpは、とりあえず関数の対応範囲が違う。
しかし、これがUNIX固有の話だと思ってここに書き込んだとしたらそれは間違いw
まじれすすると
しいて言えばaがaddress、nがnetworkじゃ?
inet_addrとinet_networkがあるしな。
aがasciiじゃ使える文字の種類が多すぎだろw
aとpは、とりあえず関数の対応範囲が違う。
しかし、これがUNIX固有の話だと思ってここに書き込んだとしたらそれは間違いw
597デフォルトの名無しさん
2014/04/08(火) 19:37:10.16ID:kcd9laA9 >>596
一部の英語ページでasciiだと書かれている所があったのでasciiだと思いました。
>aとpは、とりあえず関数の対応範囲が違う。
kwsk
>しかし、これがUNIX固有の話だと思ってここに書き込んだとしたらそれは間違いw
と言ってもUNIX発祥ですよね?
一部の英語ページでasciiだと書かれている所があったのでasciiだと思いました。
>aとpは、とりあえず関数の対応範囲が違う。
kwsk
>しかし、これがUNIX固有の話だと思ってここに書き込んだとしたらそれは間違いw
と言ってもUNIX発祥ですよね?
598デフォルトの名無しさん
2014/04/08(火) 19:55:39.16ID:pfMGzHK8599デフォルトの名無しさん
2014/04/09(水) 01:22:41.83ID:rnlf/mPK >>579
会社を探しても見つからないのでPHPを覚えることにした
会社を探しても見つからないのでPHPを覚えることにした
600デフォルトの名無しさん
2014/04/09(水) 09:01:14.53ID:e48Xi3NQ601デフォルトの名無しさん
2014/04/09(水) 09:32:21.34ID:5VEJdG+v わからないなら黙ってろよ
602デフォルトの名無しさん
2014/04/09(水) 09:57:21.51ID:e48Xi3NQ 適当なこと書くなよ
603デフォルトの名無しさん
2014/04/09(水) 10:55:51.16ID:Lfy0Xgry webはNeXTSTEP上で開発されたからでしょ。
604デフォルトの名無しさん
2014/04/09(水) 10:59:29.84ID:3Xcjw1HB ソースは?
605デフォルトの名無しさん
2014/04/09(水) 11:10:06.95ID:Lfy0Xgry606デフォルトの名無しさん
2014/04/09(水) 11:28:38.99ID:3Xcjw1HB ブラウザーか
607デフォルトの名無しさん
2014/04/09(水) 11:30:48.25ID:3Xcjw1HB サーバもそうだね、ごめん
608デフォルトの名無しさん
2014/04/09(水) 11:53:40.04ID:LRWrSFoo609デフォルトの名無しさん
2014/04/09(水) 12:45:03.71ID:Lf5xDRrs cern httpdにNextSTEPのコードが残ってるのかな?調べる元気はないが
ttp://www.w3.org/Daemon/
ttp://www.w3.org/Daemon/
610デフォルトの名無しさん
2014/04/09(水) 14:05:10.90ID:Ih8FRvRW aはBSD socket こっちがオリジナル
pはPOSIX
POSIXがpに変えた理由は分からん。atoi何かと共通でいいのにな。
>>609
NeXTSTEPで開発したと言っても、BSDシステムとして使ってるだけ。
ところどころNeXT亜種としてのifdefがある程度。
waitかwait3かwaitpidかとか。
pはPOSIX
POSIXがpに変えた理由は分からん。atoi何かと共通でいいのにな。
>>609
NeXTSTEPで開発したと言っても、BSDシステムとして使ってるだけ。
ところどころNeXT亜種としてのifdefがある程度。
waitかwait3かwaitpidかとか。
611デフォルトの名無しさん
2014/04/09(水) 14:32:24.39ID:ZHBwUHYP >>610
なるほど
なるほど
612デフォルトの名無しさん
2014/04/09(水) 14:34:12.02ID:yn/sF65z613デフォルトの名無しさん
2014/04/09(水) 15:46:27.04ID:i8e/a0RW614デフォルトの名無しさん
2014/04/10(木) 13:11:17.94ID:XJwbthao615デフォルトの名無しさん
2014/04/10(木) 13:49:44.14ID:TvL1VyED616デフォルトの名無しさん
2014/04/10(木) 14:09:32.07ID:UW8P9M5z617デフォルトの名無しさん
2014/04/10(木) 14:50:52.67ID:J/8goZVV >ウェブの質問をする場合はNeXTか?
ウェブといえばブラウザーの話な、これまめな
ウェブといえばブラウザーの話な、これまめな
618デフォルトの名無しさん
2014/04/10(木) 14:56:00.17ID:XJwbthao つまらないボケのつもりなのか何なのか。
619デフォルトの名無しさん
2014/04/10(木) 14:57:31.49ID:FMX8fFXB つかタダでさえ人減ってるのにいがみ合ってどうすんだよ
620デフォルトの名無しさん
2014/04/10(木) 14:58:53.83ID:HaZcfplR >>612
使ってたよ。今のiOSのCocoa Touchにあたるものが既にあったからね。
当時大学でNeXTが使えたので一応リアルタイムで遊んだ。
しかし「所詮ハイパーテキストだろ」、と思った俺に先見の明はまるでなかった。
Gopherでエロ画像を配布・収集することに精を出していたのはいい思い出
その後NeXTからWebObjectが発表されて、ただの静的なハイパーテキストから
動的なWebアプリの概念が発展していった、と理解している。
使ってたよ。今のiOSのCocoa Touchにあたるものが既にあったからね。
当時大学でNeXTが使えたので一応リアルタイムで遊んだ。
しかし「所詮ハイパーテキストだろ」、と思った俺に先見の明はまるでなかった。
Gopherでエロ画像を配布・収集することに精を出していたのはいい思い出
その後NeXTからWebObjectが発表されて、ただの静的なハイパーテキストから
動的なWebアプリの概念が発展していった、と理解している。
621デフォルトの名無しさん
2014/04/10(木) 15:47:15.93ID:J/8goZVV Mosaicからしか知らん
tp://ftp.ncsa.uiuc.edu/Mosaic/
tp://ftp.ncsa.uiuc.edu/Mosaic/
622デフォルトの名無しさん
2014/04/10(木) 16:45:24.84ID:A86XAulB そういやarchieを最後に使ったのがいつだったか思い出せないや
623デフォルトの名無しさん
2014/04/10(木) 20:58:27.68ID:CGLbGtu7 どこまでタイムスリップしたらwwwの創始者になれるかな。
624デフォルトの名無しさん
2014/04/10(木) 21:29:38.26ID:12EYUgzM www
625デフォルトの名無しさん
2014/04/11(金) 09:27:55.52ID:I+yNGwZi626デフォルトの名無しさん
2014/04/11(金) 10:02:34.34ID:F9N8K0IN627デフォルトの名無しさん
2014/04/11(金) 11:53:48.19ID:nfBS813s 今どき、サーバプログラムを作るときはどうするのがいいのかな
規模が小さいからxinetdで済ませたいんだけどそれでもいいんだろうか
規模が小さいからxinetdで済ませたいんだけどそれでもいいんだろうか
628デフォルトの名無しさん
2014/04/11(金) 13:01:29.58ID:31jcxzSz >>627
デーモンにするか、xinetd にするかは、
クライアント側からのアクセス頻度で決めるべき問題でしょ。
アクセス頻度が十分に多ければデーモンにすべきだし、
少なければ xinetd, inetd の方がいい。
デーモンにするか、xinetd にするかは、
クライアント側からのアクセス頻度で決めるべき問題でしょ。
アクセス頻度が十分に多ければデーモンにすべきだし、
少なければ xinetd, inetd の方がいい。
629デフォルトの名無しさん
2014/04/11(金) 17:18:05.86ID:aluZjTib 一般的に使われるものならinetdがないMac OS Xの事も考えてやってね。
代わりにlaunchdというのがある。
代わりにlaunchdというのがある。
630デフォルトの名無しさん
2014/04/12(土) 11:46:22.55ID:0X1ZzDgt ありがとう
inetd系でいくわ
inetd系でいくわ
631デフォルトの名無しさん
2014/04/12(土) 15:25:30.45ID:hH6WyNhq http://2;ch.sc/
632デフォルトの名無しさん
2014/04/12(土) 15:56:33.94ID:EgrmLH2O ひろゆきの宣伝うぜー。
10年前にあめぞうを荒らして2chに誘導したのと全く同じことをまたやろうとしてやがる。
全く変わらずクズだな、ひろゆき。
10年前にあめぞうを荒らして2chに誘導したのと全く同じことをまたやろうとしてやがる。
全く変わらずクズだな、ひろゆき。
633デフォルトの名無しさん
2014/04/12(土) 16:01:24.03ID:UapBJj1i なるほどね
また鯖おちたね
また鯖おちたね
634デフォルトの名無しさん
2014/04/30(水) 14:41:44.67ID:XBNt2TTL ----foo.sh----
#!/bin/sh
if [ bool処理 ];then
exit 0
else
exit 1
fi
----foo.c----
return = system("foo.sh");
if(WEXITSTATUS(return)){
シェルスクリプトでexit 0の時の処理
}else{
シェルスクリプトでexit 1の時の処理
}
このようにシェルスクリプトの終了ステータスで条件分岐したいのですが
いつもtrueになってしまいます。
どのようにすればいいでしょうか?
よろしくお願いします。
% uname
FreeBSD
#!/bin/sh
if [ bool処理 ];then
exit 0
else
exit 1
fi
----foo.c----
return = system("foo.sh");
if(WEXITSTATUS(return)){
シェルスクリプトでexit 0の時の処理
}else{
シェルスクリプトでexit 1の時の処理
}
このようにシェルスクリプトの終了ステータスで条件分岐したいのですが
いつもtrueになってしまいます。
どのようにすればいいでしょうか?
よろしくお願いします。
% uname
FreeBSD
635デフォルトの名無しさん
2014/04/30(水) 15:45:33.66ID:BnmcVkVe returnは予約語
WEXITSTATUSが非ゼロの場合のコメントが「exit 0の時」
実際に問題となったコードで出し直し
WEXITSTATUSが非ゼロの場合のコメントが「exit 0の時」
実際に問題となったコードで出し直し
636デフォルトの名無しさん
2014/04/30(水) 15:55:27.10ID:23BUNUOn637デフォルトの名無しさん
2014/04/30(水) 16:47:23.85ID:+76j8OJU t
638デフォルトの名無しさん
2014/04/30(水) 18:11:15.11ID:ZY5HChQC 馬鹿には無理
639デフォルトの名無しさん
2014/05/06(火) 12:51:39.88ID:OFsDJUcu Cで、標準入力と標準出力をひとつにして標準入出力としたい。
640デフォルトの名無しさん
2014/05/06(火) 13:49:59.83ID:5cOP3XrV すれば
641デフォルトの名無しさん
2014/05/06(火) 13:52:48.20ID:OFsDJUcu642デフォルトの名無しさん
2014/05/06(火) 17:09:21.31ID:R4LFdeTL unix ではプロセス間に生成されるパイプは基本リードまたはライトの一方向として生成されるからね‥‥
ふつうのディスクリプタのように双方向にすればいいのだが
ふつうのディスクリプタのように双方向にすればいいのだが
643デフォルトの名無しさん
2014/05/06(火) 18:55:48.96ID:G4//2ydq >>641
こういうことをしたいの?
#include <stdio.h>
main()
{
int x;
freopen("/dev/tty", "w+", stdin);
freopen("/dev/tty", "w+", stdout); // not used
fprintf(stdin, "enter a number:"); fflush(stdin);
fscanf(stdin,"%d", &x);
fprintf(stdin, "number is %d\n", x);
}
こういうことをしたいの?
#include <stdio.h>
main()
{
int x;
freopen("/dev/tty", "w+", stdin);
freopen("/dev/tty", "w+", stdout); // not used
fprintf(stdin, "enter a number:"); fflush(stdin);
fscanf(stdin,"%d", &x);
fprintf(stdin, "number is %d\n", x);
}
644デフォルトの名無しさん
2014/05/06(火) 19:01:55.55ID:G4//2ydq fprintf, fscanf じゃなく printf, scanf の方がよかったか
645デフォルトの名無しさん
2014/05/10(土) 14:44:23.71ID:W8dcXoh3 >>641
stdoutをfcloseしてから、fileno(stdin)をfdopenすればいい。
ただそれをstdoutとして使うのは処理系依存になる。
マルチスレッド対応のライブラリはstdoutに代入できなくなってるから。
fdreopenがあればいいのだが。
stdoutをfcloseしてから、fileno(stdin)をfdopenすればいい。
ただそれをstdoutとして使うのは処理系依存になる。
マルチスレッド対応のライブラリはstdoutに代入できなくなってるから。
fdreopenがあればいいのだが。
646デフォルトの名無しさん
2014/05/10(土) 16:08:42.04ID:S6+Ypxbi どういう使い方を想定していますか?
647デフォルトの名無しさん
2014/05/10(土) 20:31:33.38ID:XNOk+z7r648デフォルトの名無しさん
2014/05/10(土) 23:10:22.73ID:eu6ll0of >>647
意味ねーよ、たぶん。
意味ねーよ、たぶん。
649デフォルトの名無しさん
2014/05/11(日) 02:09:06.14ID:8Qasa1hM xinetdなんか使うときにほしいな
650デフォルトの名無しさん
2014/05/12(月) 15:49:13.01ID:iANYuL+Z651デフォルトの名無しさん
2014/05/12(月) 16:42:43.61ID:7oRV1ywD >>650
fdopenでなんとかなるっけ?
fdopenでなんとかなるっけ?
652デフォルトの名無しさん
2014/05/30(金) 18:57:46.01ID:1vuEEnaV OpenBSD の diff コマンドのソースを
src.tar.gz というアーカイブの /usr/bin/diff から持ってきて、
わずかに修正後、cygwin でビルドには成功し、一応動作はするのですが、
「diff: : Cannot allocate memory」
というエラーが二回に一回くらい出ます。「:」は二つです。
これは何が原因で、どうやったら直せますか?
ソースの修正箇所は、__dead
・__dead void usage(void) の __dead が定義されていなかったので、
#define __dead とした。
・fgetln() が宣言されていなかったようなので、
呼び出し箇所を my_fgetln() という名前に変更し、
/* $OpenBSD: util.c,v 1.23 2007/09/17 09:28:36 espie Exp $ */
/* $NetBSD: util.c,v 1.10 1996/12/31 17:56:04 christos Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
*/
/* OPENBSD ORIGINAL: usr.bin/make/util.c */
と書かれた、fgeln() のソースを関数名を my_fgetln()に変更して追加した。
src.tar.gz というアーカイブの /usr/bin/diff から持ってきて、
わずかに修正後、cygwin でビルドには成功し、一応動作はするのですが、
「diff: : Cannot allocate memory」
というエラーが二回に一回くらい出ます。「:」は二つです。
これは何が原因で、どうやったら直せますか?
ソースの修正箇所は、__dead
・__dead void usage(void) の __dead が定義されていなかったので、
#define __dead とした。
・fgetln() が宣言されていなかったようなので、
呼び出し箇所を my_fgetln() という名前に変更し、
/* $OpenBSD: util.c,v 1.23 2007/09/17 09:28:36 espie Exp $ */
/* $NetBSD: util.c,v 1.10 1996/12/31 17:56:04 christos Exp $ */
/*
* Copyright (c) 2001 Marc Espie.
*/
/* OPENBSD ORIGINAL: usr.bin/make/util.c */
と書かれた、fgeln() のソースを関数名を my_fgetln()に変更して追加した。
653デフォルトの名無しさん
2014/05/30(金) 19:05:18.54ID:1vuEEnaV なお、diffのソース・フォルダで"Cannot" "allocate" "memory" と
いうキーワードを検索してみましたが、違うキーワードが含まれた
別の文字列の一部として存在しているだけでした。
「diff」という文字列を誰がどうやって表示しているのかさえ分かり
ません。__FILE__ マクロも検索してみましたが、見つかりません
でした。
いうキーワードを検索してみましたが、違うキーワードが含まれた
別の文字列の一部として存在しているだけでした。
「diff」という文字列を誰がどうやって表示しているのかさえ分かり
ません。__FILE__ マクロも検索してみましたが、見つかりません
でした。
654デフォルトの名無しさん
2014/05/30(金) 19:10:41.56ID:SSvUP3u/ argv[0]
655デフォルトの名無しさん
2014/05/30(金) 19:31:55.39ID:1vuEEnaV main() 関数の冒頭で、
{
char **oargv; // main のローカル変数
oargv = argv;
while ((ch = getopt_long(argc, argv, OPTIONS, longopts, NULL)) != -1) {
・・・
lastch = ch;
newarg = optind != prevoptind;
prevoptind = optind;
}
argc -= optind;
argv += optind;
・・・
set_argstr(oargv, argv);
・・・
}
のようになっており、oargv は上記以外では参照されておらず、
argv[0]を参照できる可能性が有るとすれば、
getopt_long() と set_argstr()
しかないようです。
これらの関数のうちどちらかが、メッセージを出しているのでしょうか?
{
char **oargv; // main のローカル変数
oargv = argv;
while ((ch = getopt_long(argc, argv, OPTIONS, longopts, NULL)) != -1) {
・・・
lastch = ch;
newarg = optind != prevoptind;
prevoptind = optind;
}
argc -= optind;
argv += optind;
・・・
set_argstr(oargv, argv);
・・・
}
のようになっており、oargv は上記以外では参照されておらず、
argv[0]を参照できる可能性が有るとすれば、
getopt_long() と set_argstr()
しかないようです。
これらの関数のうちどちらかが、メッセージを出しているのでしょうか?
656デフォルトの名無しさん
2014/05/30(金) 20:04:01.04ID:SSvUP3u/ 餅は餅屋
cygwinはcygwinから
cygwinはcygwinから
657デフォルトの名無しさん
2014/05/31(土) 07:45:18.26ID:6bjDZoIF OpenBSDのdiffソースをもってきた理由は、ライセンスの問題からです。
ところで、エラーの原因が判明しました。
set_argstr()の中で、argsize が負の値になり、xmalloc(argsize)
が内部で呼び出しているmalloc(argsize)に失敗し、err(2,NULL) を呼び、
err()が、malloc()が設定したグローバル変数 errno に応じたメッセージ
として「Cannot allocate memory」を出していたのでした。
なお、set_argstr(av,ave)のavには、main() に渡された状態の argv がそのまま
渡され、ave には、-オプションを除いた後にあるファイル名まで移動したargvの
値が渡されています。
どうも、OpenBSD では、argv[k] が、0終端文字列が隙間無く並べら
れている性質を利用しているようです。
argv[0],argv[1],argv[2],…
"cmd名",0,"-opt1",0,"-opt2",0,…,"file1",0,"file2",0
途中の 0x00 を0x20(空白)に置き換えるだけなので、argsize は、
そのままのバイト数で良いからこのようなコードになっている
ようです。4足しているのは"diff"という文字列のバイト数の分のようです。
ところで、エラーの原因が判明しました。
set_argstr()の中で、argsize が負の値になり、xmalloc(argsize)
が内部で呼び出しているmalloc(argsize)に失敗し、err(2,NULL) を呼び、
err()が、malloc()が設定したグローバル変数 errno に応じたメッセージ
として「Cannot allocate memory」を出していたのでした。
なお、set_argstr(av,ave)のavには、main() に渡された状態の argv がそのまま
渡され、ave には、-オプションを除いた後にあるファイル名まで移動したargvの
値が渡されています。
どうも、OpenBSD では、argv[k] が、0終端文字列が隙間無く並べら
れている性質を利用しているようです。
argv[0],argv[1],argv[2],…
"cmd名",0,"-opt1",0,"-opt2",0,…,"file1",0,"file2",0
途中の 0x00 を0x20(空白)に置き換えるだけなので、argsize は、
そのままのバイト数で良いからこのようなコードになっている
ようです。4足しているのは"diff"という文字列のバイト数の分のようです。
658デフォルトの名無しさん
2014/05/31(土) 07:46:03.82ID:6bjDZoIF 【修正前】
void set_argstr(char **av, char **ave)
{
size_t argsize;
char **ap;
argsize = 4 + *ave - *av + 1;
diffargs = xmalloc(argsize);
strlcpy(diffargs, "diff", argsize);
for (ap = av + 1; ap < ave; ap++) {
if (strcmp(*ap, "--") != 0) {
strlcat(diffargs, " ", argsize);
strlcat(diffargs, *ap, argsize);
}
}
}
void set_argstr(char **av, char **ave)
{
size_t argsize;
char **ap;
argsize = 4 + *ave - *av + 1;
diffargs = xmalloc(argsize);
strlcpy(diffargs, "diff", argsize);
for (ap = av + 1; ap < ave; ap++) {
if (strcmp(*ap, "--") != 0) {
strlcat(diffargs, " ", argsize);
strlcat(diffargs, *ap, argsize);
}
}
}
659デフォルトの名無しさん
2014/05/31(土) 07:46:54.80ID:6bjDZoIF 【修正後】
void set_argstr(char **av, char **ave)
{
size_t argsize;
char **ap;
argsize = 4; // "diff" 文字列の長さ
for (ap = av + 1; ap < ave; ap++) {
argsize += 1 + strlen( *ap ); // 間の空白 + 引数の文字数
}
argsize++; // 最後の NUL終端文字列
diffargs = xmalloc(argsize);
strlcpy(diffargs, "diff", argsize);
for (ap = av + 1; ap < ave; ap++) {
if (strcmp(*ap, "--") != 0) {
strlcat(diffargs, " ", argsize);
strlcat(diffargs, *ap, argsize);
}
}
}
void set_argstr(char **av, char **ave)
{
size_t argsize;
char **ap;
argsize = 4; // "diff" 文字列の長さ
for (ap = av + 1; ap < ave; ap++) {
argsize += 1 + strlen( *ap ); // 間の空白 + 引数の文字数
}
argsize++; // 最後の NUL終端文字列
diffargs = xmalloc(argsize);
strlcpy(diffargs, "diff", argsize);
for (ap = av + 1; ap < ave; ap++) {
if (strcmp(*ap, "--") != 0) {
strlcat(diffargs, " ", argsize);
strlcat(diffargs, *ap, argsize);
}
}
}
660デフォルトの名無しさん
2014/05/31(土) 07:52:02.32ID:6bjDZoIF なお、エラー表示に「diff」が表示されているのは、argv[0]を使って
いるわけではなく、ライブラリの err() 関数が自分でやってるんですね。
av に argv が渡されているので混乱しそうですが、たまたまです。
いるわけではなく、ライブラリの err() 関数が自分でやってるんですね。
av に argv が渡されているので混乱しそうですが、たまたまです。
661デフォルトの名無しさん
2014/05/31(土) 10:56:57.68ID:DtdLdmhz ううむ。確かに試してみるとcygwinのargv[n]はバラバラなアドレスだな
662デフォルトの名無しさん
2014/05/31(土) 14:38:59.00ID:iRT5FyvM この糞なdiffのコードはargvがらみ以外にも地雷がたくさんありそう。
argvがらみでも/usr/bin/diffがargv[0]に渡されたらダメなんじゃないか?
4ってmagic numberが糞だから。
>>661
連続してることに依存したコードは糞。
argvがらみでも/usr/bin/diffがargv[0]に渡されたらダメなんじゃないか?
4ってmagic numberが糞だから。
>>661
連続してることに依存したコードは糞。
663デフォルトの名無しさん
2014/06/01(日) 00:52:00.45ID:MxSjB8Q5 >>662
なぜダメ?ソース見て言ってる?
なぜダメ?ソース見て言ってる?
664デフォルトの名無しさん
2014/06/01(日) 00:57:21.10ID:MxSjB8Q5 というか、これぐらいで糞糞って言ってるのは初心者なんだろうな
665デフォルトの名無しさん
2014/06/01(日) 02:19:51.86ID:e/SJ8pUJ666652
2014/06/01(日) 13:29:53.55ID:uUGuheMf OpenBSD の diff ソースは、本質的に複雑な処理の割にはソースが驚くほど
短いです。正直言って、腕のよさを感じました。ソースは:
diff.c 11KB
diffdir.c 7KB
diffreg.c 39KB
xmalloc.c 3KB
の4つしかソースが無く、本質的には、diffreg.c のみの 1522 行しか
ありません。こんなに簡潔に書ける人は、世界でも余りいないのではない
でしょうか?
ただし、
・複数の変数を同一行でカンマで区切って宣言している。
・ローカル変数の名称には1文字など、とても短い物が多い。
・if () で処理が一行の場合、ブロック {} にせずに書いてある。
・空行が少ない。
などの特徴があります。
短いです。正直言って、腕のよさを感じました。ソースは:
diff.c 11KB
diffdir.c 7KB
diffreg.c 39KB
xmalloc.c 3KB
の4つしかソースが無く、本質的には、diffreg.c のみの 1522 行しか
ありません。こんなに簡潔に書ける人は、世界でも余りいないのではない
でしょうか?
ただし、
・複数の変数を同一行でカンマで区切って宣言している。
・ローカル変数の名称には1文字など、とても短い物が多い。
・if () で処理が一行の場合、ブロック {} にせずに書いてある。
・空行が少ない。
などの特徴があります。
667デフォルトの名無しさん
2014/06/01(日) 15:42:24.51ID:fiMuA4/7■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】東京・足立区のひき逃げ事故 警視庁が運転手とみられる人物確保 [Ailuropoda melanoleuca★]
- 【東京】乗用車が歩行者をはね11人ケガ、うち2人重体 現場に残されたセダンの運転手が衝突後に逃走…ひき逃げ事件として捜査 足立 [ぐれ★]
- スペイン、移民受け入れで成長 1人当たりGDP日本超え ★2 [蚤の市★]
- 尖閣周辺に中国船、10日連続 いずれも機関砲搭載 ★2 [蚤の市★]
- 2025/11/24(月) 14:14:13.84 ID:gjXEDwyM0<> 】「低空飛行」NHK紅白を見舞ったK-POP多用、YOASOBI演出、旧ジャニーズ不在の三重苦 [尺アジ★] (1002) [芸スポ速報+] <br> 2:【日刊ゲンダイ】TOBE滝沢秀明社長に求められる説明責任 旧ジャニーズの領地をそっくり“頂き”は済まされない [尺アジ★] (31) [ニュース速報+] <br> 3:【共産党】小池書記局長、ジャニーズ性加害問題で政府批判「どうも人ごと的。きちんと関与して」 [尺アジ★] (555) [ニュース速報+] <br> 4:【ジャニーズ事務所会見】望月衣塑子記者の「テレ朝はきょうも中継していません!」に総ツッコミ 井ノ原快彦も「望月さん、しています」 [尺アジ★] (1002) [芸スポ速報+] <br> 5:【テレビ】浜田雅功「尺できた」で収録終了 ジャニーズのタレントを放置 [爆笑ゴリラ★] (135) [芸スポ速報+] <br> 6:民放「長時間の音楽特番やるよー!」ワイ「どれどれ」民放「ジャニーズ!秋元アイドル!K-POP!尺稼ぎVTR!」←これ (8) [ニュー速VIP] <br> <br> 空席…滲むド軍ファンの思い [尺アジ★] (779) [芸スポ速報+] <br> 2:大谷翔平シーズン当初の長尺バットやめてたんだな (3) [なんでも実況G] <br> 3:「大谷ファンの高齢者にとっては絶望的」WBCの“Netflix独占配信” ★3 [尺アジ★] (838) [芸スポ速報+] <br> 4:「大谷ファンの高齢者にとっては絶望的」WBCの“Netflix独占配信” ★2 [尺アジ★] (1002) [芸スポ速報+] <br> 5:「大谷ファンの高齢者にとっては絶望的 <>
- 「『中国との対話望む』日本側の姿勢は偽善」 中国共産党系国際紙が批判 高市総理の答弁撤回改めて求める [蚤の市★]
- 【高市速報】足立区でテロ [931948549]
- 【高市悲報】日本人、足立区11人ひき逃げ犯の国籍で大荒れwwwwwwwwwwwwwwwwwwwwww [316257979]
- 🏡👧👩💥🚗👴💨プリウスミサイル発射ぁぁ!
- 足立区の事故現場の写真を撮っただけのオッサン、炎上wwwwwwwwwwwwwwwwwwwwwwwwwwwwww🤳 [329329848]
- すまないが…いちいち覚えてられないんだ
- 【悲報】高市政権外務省「旧敵国条項、既に死文化しただろ!!!!」Xで発信 [115996789]
