UNIX使いなのにプログラミングできないヤシ
あーあー、人にレポート頼んじゃって その代わりとして、>>774 は「2点間(x1,y1)から(x2,y2)に直線を引く」line(x1,y1,x2,y2)を 「psetを使って」実装すること 質問です 子プロセスをfork()/exec()したあと、wait()してくれない親プロセスがあります。 なので、子プロセスが終了するとゾンビになり、子プロセス終了のたびに ゾンビがたまっていきます。 親プロセス側でsignal(SIGCHLD, SIG_IGN)すればゾンビにならないことは確認済み ですが、都合により親プロセス側のプログラムを修正できません。 子プロセス側で何とかして、exit()してもゾンビにならないようにする方法は ありませんか? 子プロセスで、もう一度forkしfork() > 0の方はexitする。 これで親に対して縁切り宣言し、initの子に養子縁組されるので確実にwaitしてもらえる。 ああ、fork() > 0の方がゾンビで残るわ。ダメだね。 >>777 それはすでに試しました。 それやると、目的の子プロセスはゾンビになりませんが、 中間でダミーでfork()するプロセス自体がゾンビになるので、 ゾンビを一切発生させたくないという目的の解決にはなりません。 引続き回答をお願いします。 結論: 親を何とかしないと無理。LD_PRELOADでコード潜り込ませるとか。 組み込みマシンの出力ポート側の都合でインバーター1個追加になったんで、 プログラム側でポートの論理反転でお願い、って頼んだら、 え?なに? インベーダー? って聞き返された。 インバーターだよ、インバーター、って回路図見せたら、 あっこれ、見たことある。ダイオードって言うんだっけ? とか言われてハァ?w なんだよ。確かに三角形だけどな。 ソフト屋でもインバーターとか最低限のハード知識身に付けとけ。 UNIX屋ってこれが普通ですか? 計測/制御にUNIXを当てているなら普通 DI/DOインターフェース、みたいなw dup()等でfd複製したあとfork()して、親も子も同じfdをオープンし続ける場合、 子側からfdを親から独立させることってできない? そのままじゃlseek()した時とかのポインタが親と共有なので独立じゃないし。 fdからファイル名を逆探知してopen()し直すのはナシの方向で。 あと、親プロセス側のコードもいじれないという前提。 今時フロッピーのプログラムは実機持ってない人の方が多いんじゃないかな >>783 UNIXが作られてから40年。 その機能が無いってことは、誰も必要としなかった、すなわちお前の アプローチが間違っているという事。別の方法を考えるべし。 >>783 小プロセス上でそのfdをもう一度dup2して、もとのfdをcloseすれば良い。 >>787 すみませんが詳しい方のみ回答をお願いします 子プロセス上でそのfdをもう一度dup2してもとのfdをcloseしてから、 もう一度forkしてその親側をexitすれば良い。 >>789 すみませんが詳しい方のみ回答をお願いします 皆さんありがとうございました。 今環境がないので後日試してみます。 そりゃフロッピーがある環境なんて手元にはないだろな >>789 その方法でうまくいったみたいです。ありがとうございました。 ある関数に渡された可変長引数を、別の関数に転送したいのですが書き方がわかりません 具体的にはC言語の関数のhoge()をhoge(a,b,c,d,…)で呼び出すと,内部で別の関数funcを引数a,b,c,d,…で呼び出すような場合です. 引数の数が固定であればhoge(a,b,c,d)の中にfunc(a,b,c,d)と記述すれば良いのですが,可変長に対応しようと...を用いると hoge(...)の中にfunc(...)と記述してもエラーになり,引数展開されません. どなたかわかる方がいましたら,ご教授ください. void func(int a, va_list ap) { int b = va_arg(ap, int); int c = va_arg(ap, int); int d = va_arg(ap, int); } void hoge(int a, ...) { va_list va; va_start(va, a); func(a, va); va_end(va); } これでわかるかな? >>798 不正解。 それだと func()をva_argで呼び出すことになるからダメ。 func()自身も引数の個数が不定で、func(a,b,c)だったり、func(a,b,c,d,e)だったり するものという想定だから。 セグメンテーション違反がソースではなく、コンパイルに問題にあって発生 している場合 どうしたら実行できますか 先日、他部署を交えて開かれた社内技術交換会でのこと。 先輩は自分が担当したパッケージソフトのプログラミング中に思いついたという あるアルゴリズムについて得意気に解説し始めた。話し始めてしばらくして、 隣の部署の人が口をはさんだ。「それ、有名な○○のアルゴリズムですよね。 ウチでも昔はよく使いました。でもそれには××という欠点があるので、 今ではその改良版の◎◎のアルゴリズムの方を使っています。 ところで今日のお話は○○のアルゴリズムの別の改良方法か何かですか?」 そのあと先輩の話は支離滅裂になり、何の技術交換会だったのか よく覚えていない… LinuxとBSDで開業コード違いますよね。 Linuxは0xnで改行、BSDは0xrで改行しますよね。 どうしてこういう違いができたんでしょう? シーゲンで簡単に返還する方法はありますか? >>803 見てるかな? マクロ定義で変換するのが基本だYo(w #ifdef LINUX #define CRLF 0xn #elif BSD #define CRLF 0xr #else //Windows #define CRLF \x0d\x0a #endif 質問です。 共有ライブラリのダイナミックシンボルを実行時に解決する際、 プログラムのtext部分は原則書き換え不可なので、 data部分のみ書き換えて対応しますよね。 実際、関数呼出しについてはdata上の番地を一旦呼んで そこから間接ジャンプするようになってます。 問題は、extern char *hoge[] みたいなデータが共有ライブラリ側にあって それをプログラム側から hoge のシンボルで参照する時です。 コンパイル結果では、hogeのアドレス値はイミーディエイトでレジスタにロード されているようで、これではシンボル解決の際に命令コードのイミーディエイト部分、 つまりtext部分を書き換えないといけないことになってしまいます。 それはおかしいと思いますが、実際にはどうやっているのでしょうか? >>805 ダイナミックリンクライブラリの関数の呼び出しと 同じだったと思うが。 インポートテーブルを作って そこでアドレスの解決をしている、だったと思う。 記憶があやふやなので、間違っていたらスマン m( _ _ )m >>806 関数の呼び出しと同じじゃないよ。 >>805 のいう通り immediateで直接アドレスが埋め込まれてるから。 オフセットテーブルすら使ってないで実行されてる。 >>805 externで直接参照されるデータだけは部分的に静的リンクされてプログラム側に埋め込まれる。 古いOSでは、libhoge.soの他にdataセクションだけ静的に分けたlibhoge.sa なんていうものが必要だった。 今のOSではファイルはlibhoge.soだけだが、データが静的リンクされることは変わらない。 せっかくのライブラリの共有効率を高めるためにも、データはexternで参照しない方がいい。 算術が苦手で算譜できない俺が、これからWebサーバ(HTTPを話すプログラム)をプログラミングしようとしている。 使用言語:C言語 目的:キーボード入力を読み取る(キーのプッシュ・リリースも読み取りできるように) /dev 以下に存在するデバイスから、キーボードデバイスを検索して int fd = fopen() する方法がわかりません。 (キーボードデバイスを探す為の具体的な方法がわかりません) これを判定して検索する為の便利な関数や、定形的な方法はあるのでしょうか。 でも、X serverはやってるよね 探さないで決め打ちかな 32bit版の共有ライブラリ(lib*.so.*)を、64bit版の実行ファイルからリンクするなりdlopen()するなりして呼び出す方法ないですか? 32bit版lib*.so.*がバイナリのみでソースがない場合に、このライブラリを64版の実行ファイルから関数を呼び出して実行したいのです。 このライブラリの64bit版はありません。 よろしくお願いします。 +=の利点について教えてください。 i += 123; は、 i = i + 123; とも記述できますよね?なら+=の必要性はあるのでしょうか? char s[4096]; puts(getwd(s)); ↑ これだけのプログラムなのにセグフォります。わかる方、お願いします。 今月はじめ、職場に新しい組み込みマシン(ファンレスの結構省電力構成)が入りました。 多分私が開発全般をまかされそうな雰囲気です。業務的にとある構造分析や シミュレーションなど行う必要があり、プログラムにアセンブラを使用するのは 聞いていたのですが、添付のサンプルソースコードからチラッと見えたのは LD A,(HL)という命令でした。 「うへぇ〜、よりによってZ80かよ」 アドレッシングモード皆無、リロケート不可、使いにくいインデックスレジスタ、 今時の関数引数のスタック渡しに対応できるのか不安はつきませんし、 今の若者はこんなCPU使わないので人材も少なくソフト開発も大変です。 おそらく導入に際して、大学など教育機関で最初にZ80に触れて刷りこまれた人間が 強気の知ったかぶりをして発言権を得て「俺流」をつらぬき紛れ込ませたのでしょう。 昔、当時、8bitCPUでi8080上位互換でi8085よりも多くのツギハギ命令を追加拡張した Z80は大学など教育機関に浸透していて、日本のCPU界に多くのバカが輩出しました。 これから私は、おそらくそういうバカが、ADD A,(HL)はできるのにADD B,(HL)は できないのかとか、相対アドレスのCALL命令はないのとか、 スタックフレームポインタとして使いたいのにLD HL,SPっていう命令ないじゃんとか、 アセンブラ通気取りの偏ったどうでもいい我侭を言い出し(だからZ80使うんじゃねーよ) それと戦わなければならないのでしょう。そして時代によって決着している、 過去30余年のCPU界隈のくだらないそれらの議論が再現され、それに巻き込まれるの でしょう。もう今からうんざりです。 だからお願いです。教育現場ではi386でもi568でもi686でも x86_64でもなんでもいいですが現行のCPUにしてください。 教育機関で懐古趣味のバカを量産されると現場が非常に苦労するのです。 モノクロからモノクロへのビット転送のXCopyPlaneがBadMatchで失敗する。 助けて下され。 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 YTBO3DTOF5 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 4VEAB その枠やNHKドラマ妙に上げ始めたの娘!あんたの家の都合上で音楽聴いて read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる