Python で rlwrap もどきを作ろうとしていて、大体は動いているのですが、
最初にタイプした1文字だけが2回エコーされてしまいます。
どうしてか教えていただけないでしょうか。
http://codepad.org/JUkKghqq 環境はCentOS 5.3 / Python 2.4 です。
もしこれがCで書かれていたら、「K&R読め!」で解決する問題か?
860 :
名無しさん@お腹いっぱい。:2010/02/06(土) 21:35:51
readv()で読んだデータがバッファより短かった場合でも、
struct iovecのiov_lenが元の値のままです。バグでしょうか?
どうやってデータサイズを知ればいいんでしょうか?
man良く読んでご覧。OSのバグという事にしたがるのは100年早い。
Each iovec entry specifies the base address and length of an area in
memory where data should be placed. The readv() system call will always
fill an area completely before proceeding to the next.
>>861 man良く読んでご覧。引用した部分だと「今のバッファを完全に満たしてから
次のバッファに移る」ことを言ってるだけで、データが足りなかった場合の
答えになってない。
man引用しただけで解答になってることにしたがるのは100年早い。
>>862 煽って回答聞こうなんて随分古い手つかうな。www
これで理解出来ないなら、プログラム作るのは100年早い。
864 :
862:2010/02/07(日) 11:03:18
>>863 俺、回答者の間違いを指摘しただけだし。
質問してるわけじゃないし。
>>864 理解出来ないバカが横から割り込んだ事にしたいのか? 必死だな。ww
お前がプログラムにつまずいていてもオレは全然困らない。
866 :
862:2010/02/07(日) 11:12:08
おそらく
>>861 は、"always fill" だけを読んで
「バッファは常に満たされる(満たされないことはあり得ない)」と
誤解したんだろう。そのあとの "before" の条件を読み落してる。
で、
>>860 が質問してるのは、バッファが満たされなかった時の
そのサイズ等の取得方法。manを参照するとしても、
>>861 の部分ではポイントがズレてる。
ちなみに、俺は質問してるんじゃないので、正解は知ってる。
俺も
>>861 は意味不明だと思ったよ
質問者は iov_len がなぜか更新されない。バグか?、って訊いてるのに
関係無い引用して論破したテイになってるのが不思議
そもそも
>>861以降
>>860 の質問に誰も答えてないことの方が
あれなわけだけど
そんなに、必死に弁解するなよ。w
つーかmanよく読めって言うにしても
>>861は指摘する場所が見当違いだわな
全力で工作中だな。
お前のプログラムが完成しなくてもオレは全然困らない。
871 :
名無しさん@お腹いっぱい。:2010/02/08(月) 11:44:01
複数の数字に,同じ四則演算(+,−,*,/)を繰り返した計算結果を表示するシェルスクリプトを,cshシェルスクリプトで書け。
(基本仕様)
@ コマンドとして実行できる.(シェルコマンドである.)
A 入力した数字を計算できる.
B 入力できる数字の個数は2以上とする.
C 四則演算子(+,−,*,/)を選択,または直接入力して
数字1□数字2□・・・□数字N (□=+ or − or * or /,N≧2)
の計算結果を出力する.
D 四則演算子以外の記号が入力された場合,エラーメッセージを出力する.
(ポイント)
? シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
? 標準入力から文字列を入力するには $< を用いる.
? コマンドラインに引数を指定した場合は,その引数は変数$argvに格納されている.その各要素を参照するには,$argv[1],$argv[2](または$1,$2)などとする.
? 四則演算には @ コマンドが使用できる.(ただし,整数しか扱えない.)
誰かわかるひとお願いします
あぁ、マルチか。
つられちゃったw てへっ?☆
csh って事はネタ振りかな?
>>873 日本は義務教育で基礎法学を教えないからわかってない人が多いみたいだけど、権利と義務は表裏一体、つまりワンセットなんだよ
例えば「生きる」という権利には「働く」という義務が伴なう。これは習っていなくたって誰でも常識で分かると思うけど
社会の中のあらゆる権利にはそれと対になる義務が存在するということ
戦後の日本人はこの表裏一体を勘違いして、自分の権利は相手の側から見ると義務なんだ、等と意味不明な屁理屈を捏ねて
相手(多くの場合国家)に対して一方的に権利を主張、すなわち義務の履行を求める者が多い
いわゆるプロ市民と呼ばれる物共だ
日本人が彼らのような人間(一方的に権利を主張するだけの個体がそもそも人間の定義を満たすのかどうかは疑問だが)に違和感を覚えないのは
もちろんマスコミの罪でもあるけど元を糾せば教育にも決して原因が無い訳ではない
なにがおもしろくてこんなバカ丸出しのコピペをするんだろ。
>>875 了解
漏れも基礎方角を学んで起きたかった
879 :
名無しさん@お腹いっぱい。:2010/05/25(火) 07:45:10
fopen()を使ったCをopen()に変更しろと言われたんですが、、
単純にfを削除しても動きません。どうすればいいんでしょうか?
悪いことは言わんから、
「プログラミング言語C」とかのちゃんとした本をちゃんと読むか、
それを言った本人に頭を下げて教えてくれと頼め。
>>879 プログラムの先頭に #define open fopen って書いとけば、
単純に fopen()をopen()に修正して動くよ。
信じるものは足元をすくわれる、の典型だなw
×「足元をすくわれる」
○「足をすくわれる」
「足元」=「地面」←すくえない
fdopen
>>885 どうでも良いけど、「足元」=「地面」なのか?
手元とか根本とか耳元とか、「元」は単に付近という意味だと思われ。
>881 を真に受けるような奴はプログラミングに向いてないから別の道を選んだ方がいいお
あるファイルに xパーミッションを追加したいんですが、
chmod("hoge", 0111); だと、--x--x--x になってしまいます。
chmod("hoge", +0111); ってやっても変わりません。
chmod("hoge", 0755); だと、x以外のパーミッションまで変わってしまうのでNGです。
今は仕方なく、system("chmod +x hoge"); でやってます。
どうすれば?
stat()してst_mode調べてORをとってchmod()
>>890 chmod("hoge", "+x"); で行けます。
第2引数が文字列型の場合、関数オーバーロード機能で
それ用の別のchmod()関数に自動的にリンクされます。
gccのバージョンが古いとこの機能が使えないことがあります。
なにそれ。今のg++はそんなのあるの?ムダな・・・
それって、いくらなんでもインクルードでの定義は必要だよねえ。
釣られすぎ
>>891 st_mode = stat("hoge");
chmod("hoge", st_mode+0111);
ってやったんですが、ダメでした。
>>892 ありがとうございます。それでやってみます。
897 :
名無しさん@お腹いっぱい。:2010/06/13(日) 08:14:01
C型言語を覚えろと言われました。
コンバインは毎回しなくちゃ行けないんですか?
タームを開いてコンバイラのシェルを打つのが大変です。
拡張子の・Cに関連漬けしてダブルクリックでやるには
どういう設定をすればいいですか?
もうちょっとです
面白いと思って書いてるのかな? すげー不思議。
int main() { return main(); }
Segmentation fault
コンパイラの最適化でテールリカージョンはただの無限ループに
置き換えられるのでスタックオーバーフローもセグフォもしないし、
面白くないな。
俺はお前の方が面白くない奴だと思う
char main = 195;
ちゃんと実行できる
906 :
名無しさん@お腹いっぱい。:2010/07/23(金) 20:22:24
open()とfopen()はどう違うんでしょうか?どう使い分け?
puts()は改行付き、fputs()は改行なしなのを考えると、
fopen()の代わりにopen()を使うと自動改行モードになるんでしょうか?
openは(OSが提供する)低レベルなブロック単位での入出力を行う、
fopenは行あるいは文字単位の入出力を行う事が出来る。
open()でも行や文字単位の入出力はできますが、、
openで行単位の入出力を行うコードを見せてもらおうか。
>>907 の回答が不的確だな。
これだとopenが決まったブロック単位でしか入出力を行なえないように誤解されるし、
あと、行/文字単位かどうかはfopenで指定するものじゃないから
まるでfopen自体にそんな指定があるかのような回答は不適切
>>909 ぐぐれ。
知らないなら教えてくださいと言え。
>>909 fopenも内部でopenを呼んでるんだよw 別系統の関数なのではない。
仮にopenで行単位の入出力ができないなら fopenでもできないことになる(背理法)
913 :
名無しさん@お腹いっぱい。:2010/07/23(金) 20:55:34
>>912 翻訳すると。お前には出来ないという事だな。
>>913 見苦しいな。
>>913 の負けだ。
逆に open で開いたファイルに対して、
行単位での入出力を禁止するようなコード書けるなら書いてみろ。
何でopenしようが、結果的に read/writeが行単位のデータで来れば
行単位で入出力される。
915 :
名無しさん@お腹いっぱい。:2010/07/23(金) 21:15:05
>>914 見苦しいぞ。お前の負けだ。
openで開いたファイルに対して追加処理をしなければ行単位の出力はできない。
追加処理を加えれば出来るのは当たり前だ。
お前のバカ理屈は、「openで英日翻訳」が出来ると言っているに等しい事に気付け。バカ。
>>915 その理屈だと、fopenでも行単位の出力ができないことになる。
行単位の出力を指定するのはfopenの仕事じゃないから。
fopen以外の部分はお前の言う「追加処理」だから別な。
917 :
名無しさん@お腹いっぱい。:2010/07/23(金) 21:19:28
918 :
名無しさん@お腹いっぱい。:2010/07/23(金) 21:21:14
「openで英日翻訳」が出来ると主張しているバカがいるって聞いてきました。本当ですか?
>>915 何の追加処理もなく、ストレートに行単位出力できますが、、
fd = open(省略);
write(fd, "aho¥n", 4);
write(fd, "boke¥n", 5);
逆に、fopenで開いた場合は setbufなどの追加処理をしない限り
(行単位ではなく)まとめて出力されてしまう。
(端末などの、デフォで行単位出力になってる場合を除く)
920 :
名無しさん@お腹いっぱい。:2010/07/23(金) 21:30:43
入出力であって出力だけじゃないんだよ。
見苦しいぞ。お前の負け。
「openで英日翻訳」出来るという主張を更に続けるか?
>>920 openでオープンして、結果的に read/writeが行単位のデータで来れば
行単位で入出力される。
>>907 が、「openはOSによって決まったブロック単位でしか入出力できない」と
言ったことに対する反論として十分。
>>920 行単位で入力することはfopenの方こそ難しいぞ。
fgetsとかで行単位で読んでるつもりでも、内部バッファには1行以上
読み込まれてるからな。
openのファイル記述子を直接readすれば、
入力が行単位ならそのまま1行毎に結果が返ってくる。
923 :
名無しさん@お腹いっぱい。:2010/07/23(金) 22:20:28
>>921 見苦しいぞ。入力はどうしたんだよ。
>
>>907 が、「openはOSによって決まったブロック単位でしか入出力できない」と
改変すんな。クズ。 「決った」「出来ない」とか勝手に付け加えんな。
>>922 バカは引っ込んでろ。
Q. このスレはプログラミングの質問に向いていますか?
A. このスレはプログラミングの質問を装った釣り質問をネタに回答者同士の
バトルで盛り上がるには向いていますが、プログラミングの質問には
向いていません。
話しているレベルがあってないんじゃないかな?
どのレベルで言ってるのかわからないが、呼び出す人が見るレベルだと思うのでfgetsは行単位入力だと思う。
>>907はfread/fwriteの存在をどう扱うのか?
>>921はたまたまread出来たバイト列の最後が改行だっただけだよね。
バッファが足りないとかを除いてfgetsは必ず行単位で入力できる。
open->fdopen->fgets出来るんだから行単位の入出力がopenで出来ないと言うのは不自然。
openで出来ないと言っている人は、open+readで出来ないと言っているのであって、
readで適当に読みつつ改行が来るのを待てば良いというのは分かっているように思える。
openで出来ると言っている方は入力が行単位ならとか仮定が無理だろ。2行まとめてきたらどうするんだ?
出力はどうでも良い。
ごめん。
>>907は出来るって言ってるだけで、他の単位の入出力のことは否定してなかった。。
ごめんなさい。
というか、open()したあと fdopen() すれば行単位入出力とか当然できるじゃん。
「fopen()を使わないと行単位入出力できない」というのは間違い。
で、結局誰も
>>906 の質問に答えてないってどうよ?
>>925 > openで出来ると言っている方は入力が行単位ならとか仮定が無理だろ。2行まとめてきたらどうするんだ?
2行まとめてきた場合は fopen+fgetsでも行単位で読めない。
fgetsの返り値で見かけ上行単位になってるだけで、
内部バッファには2行分すでに読み込まれてしまってる。
ファイルI/O的に、本当に1行だけ読みたい場合に使えない。
なので、「入力が行単位なら」と仮定して考えることは妥当。
>>907 >fopenは行あるいは文字単位の入出力を行う事が出来る。
えっと、stdioは 出力の _IONBF _IOLBF _IOFBF はすべてできるけど、
入力については _IONBF か _IOFBF だけで、_IOLBF はできない(指定しても無意味)なの で、
入力については行単位バッファーはできないよ。
fopenもできないんだから、「openだけができない」と叩くのは間違いだな。
>>929 > 「fopen()を使わないと行単位入出力できない」というのは間違い。
それは逃げ出した大元のバカが苦し紛れに改変した主張。バカは引っ込んでろ。
>>928 お前のせいで
>>930のようなバカがまた湧いて来たぞ。責任とって粛清しろ。
>>931 > 「openだけができない」
誰がそんな事言ってんだよ。引っ込んでろ。カス。
>>933 >>920 で、>入出力であって出力だけじゃないんだよ。
入力について叩いてますなw
>誰がそんな事言ってんだよ。
お前さんが言ったんだろ?
>>934 >
>>920 で、>入出力であって出力だけじゃないんだよ。
その文脈は「openでは追加処理しなければ出来ない」
条件削除して改変すんな。クズ。
気がついたら夏休みかー。
バカとかカスとかクズとか。。。w
よっぽど育ちが (ry
プリミティブなopen(2)は、入出力に関してはやろうと思えばなんでも出来る。ただし標準のシステムコールに1行入力はない。
Cの標準ライブラリに指定したストリームから読み出して1行分を返す関数がある。この関数に使うのがfopenの戻り値。fopenは中でopenを呼ぶ。
じゃだめ?
だめ
fopenって、単にopenなどの低レベルな関数を扱いやすくしたラッパーであるだけでしょ?
/*´Д`*/
プログラムで質問があります。
/hoge/test/
の中に
1filename1.gif
1filename2.gif
2filename1.gif
2filename2.gif
があるとします。
# sh /hoge/test/*filename*
という感じにコマンドを入力すると
それらの複数のファイルが
command /hoge/test/1filename1.gif -option /aaa/bbb/1filename1.jpg
command /hoge/test/1filename2.gif -option /aaa/bbb/1filename2.jpg
command /hoge/test/2filename1.gif -option /aaa/bbb/2filename1.jpg
command /hoge/test/2filename2.gif -option /aaa/bbb/2filename2.jpg
って感じにファイルが無くなるまで全て、コマンドを実行したいのですが
どうすればいいのでしょうか??
943 :
名無しさん@お腹いっぱい。:2010/11/08(月) 18:46:31
age
944 :
名無しさん@お腹いっぱい。:2010/11/14(日) 12:28:09
age
sage
sage
sage
selectシステムコールのタイムアウト値を指定する場合、
最大値は何か決まってるんだっけ?
time_t
最大値は0
>>950 0は最小値だよw (待ち時間なし)
タイムアウト無限大のことを言いたいなら NULLが正しい。
そうそう
それそれ
互換ライブラリのselect(3)がpoll(2)を呼び出してるようなOSでは、
(intの最大値÷1000)秒が上限かもね。
954 :
948:2010/11/20(土) 21:53:08
説明不足ですまん。
NULL以外での最大値があれば教えて欲しいのだ
select内で制限とか掛けてないのであれば
やっぱり単純にtime_tの最大値かね?
955 :
948:2010/11/20(土) 21:54:33
リロードせずに書いてしまったw
>>953 内部で明示的に制限を掛けてなければそれが最大値かな?
仕様通りtime_tのmax(68年)だろ。
sage
sage
utmp内のユーザの出身ホスト(ut_host)がない理由は何が考えられるのかな?
つまり、wコマンドでFromが”-”で表示されるセッション?はどういう意味?
sage
俺の会社のプログラマは、関連会社のプログラマとの間で
ノウハウ交換会を定期的に開いている。
その会に先輩と俺が呼ばれて参加した。
先輩は、直前の担当製品のコーディング中に自分があみ出したという手法について
自身満々に発表し始めた。
先輩:「こういうデータを扱う時は、こういうコーディングにすれば効率…」
関連会社PG:「あ、それ○○のアルゴリズムですよね。ウチでも昔はよく使いました。
でも、□□の欠点があるので、今では改良版の△△のアルゴリズムを使ってます。
今日のお話というのは○○のアルゴリズムの別の改良法ですか?」
先輩:「……」
その後話が支離滅裂になり、何のノウハウ交換会だったのかよく覚えていない…
962 :
名無しさん@お腹いっぱい。:2010/11/29(月) 16:55:52
>> 961 よくあること。多分これからも繰り返されること。
アルゴリズムを調べてコードに起こすだけでは満足できず、自分で改良を
加えたり、さらに他人の類似のソースコードを読んだりしている人の話を
聞くのは勉強になるね。先輩もまだまだこれから勉強だね。
自身満々ならしょうがない
漏れも小学生の頃通分を自分で編み出して喜んでたわ
鵜呑みで覚えるより自分で考えたもの+αの方が理解は深まるよね
>>964 それはすごい!
ほんとに自分で編み出したのなら
ピタゴラス級だ!
>>964の意訳:人生の最高点が小学生
あまり褒めてやるな。余計につらくなるだろ
968 :
966:2010/12/01(水) 22:52:10
>>967 君は真面目だね。
>>964の意訳:
>>961に対して、自分の過去の過ちを引き合いに出して、
「自分が編み出したは錯覚だ」という主張。
対して、
>>966の意訳は:そんな事解っている。
お前が「自己のオリジナリティー」を疑問視するのは頷ける。
しかし、「本当に」編み出したなら例えstaleなアルゴリズムでも
実は凄いことなんだよ・・・と、言いたかったのさ。
婉曲ですまんねぇ。
969 :
名無しさん@お腹いっぱい。:2010/12/05(日) 17:03:10
なにこいつきもい
とあるc++プログラムが、ポインタにグローバルなクラスや変数へのポインタをもった状態で、
fork()などでプロセスを分けたとして、
子プロセスのポインタの参照はどっちのプロセスの変数やクラスを指しますか?
共有メモリとかしていないかぎりは、別々のメモリ空間内を指す
>>973 それは物理的な実装の話で、論理的な理解の邪魔にしかならないじゃないか
論理構造を、実装と勘違いする人への警告になるレスではないかな。
zoneinfoについて聞きたい場合ってここら辺の板であってますかね
ライブラリ作っててタイムゾーンはどう扱うべきなのか調べてるんですが
最新のzoneinfoからtzidとUTCオフセットを取ってそれを使えば大丈夫でしょうか?
>>976 summer time(米国では daylight saving time らしいが...)は?
DST全然考慮してませんでした
そんなに単純には行かないんですね
ちょっと自分の前提知識が足りなさすぎる気がするので
色々と情報をあたってみますわ
>>978 ついでに言っとくとだな、 米国あたりは DST の開始日/終了日を変えてたり
するんで、その辺りのケアも必要になる(たしか3年くらい前)。
これは一応 zoneinfo から情報抽出できたはず。
あと、国によっては一部の地域は DST 使ってないこともあるが、
こっちは zoneinfo からじゃわからない。
perforceスレがどこにもありません