問題タブ [systems-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - コマンドのリストを並行して実行するにはどうすればよいですか?
実行したいコマンドラインを含むファイルがあります。このファイルには約 2,000 行が含まれています。
利用可能なコアは 8 つあります。ファイルを解析して 8 つのプロセスを開始し、プログラムの 1 つが終了するたびにファイルから別のプロセスを実行することは可能ですか? ファイルの終わりに達するまでこれを続けたい。
c - Cプログラム内からデバッガーを呼び出す
私は本を読んでいます-DavidHansonによる「CInterfacesandImplementations」。この演習の質問は面白そうで、解決策を見つけることができません。
一部のシステムでは、プログラムがエラーを検出したときに、プログラムがそれ自体でデバッガーを呼び出すことができます。この機能は、アサーションの失敗が一般的である可能性がある開発中に特に役立ちます。
デバッガーを呼び出す方法の簡単な例を教えてください。
c - Cコードで動的表示をエミュレートする方法
任意の入力整数を同等のLEDディスプレイに変換できるコードを作成しました。この関数への入力としてシステムの時間を渡し、同じLEDディスプレイを取得したいと思います。
例:次の2つの入力について考えてみます。
問題:
画面出力は、「10:12:00」の前の出力を「11:10:04」で上書きして、アプリケーションユーザーが「インプレース」動的表示の感覚を得るようにする必要があります。
「C」コードでこれを実現する方法についてのヒントを提供してください。(私のプラットフォームはGNU / Linuxです)
ありがとう。
よろしくお願いします、
サンディープシン
c - バッファがmain()に対してローカルであり、ストリームを明示的に閉じることができないのはなぜですか?
私はLinuxシステムプログラミングを学んでいました、O'reilly。「よくある間違いは、ストリームが閉じる前に終了するスコープで自動変数としてバッファを宣言することです。特に、main()にローカルなバッファを提供しないように注意してください。そうすると、ストリームを明示的に閉じることができなくなります。 「」
次に、バグのあるコード例を示します。
私はコードをコンパイルして実行します..そしてこの種のコードが何を引き起こすのか本当に理解していません...この概念を理解するのを手伝ってください、ありがとうございます。
c++ - 大きなデータの送信時にピアによって TCP 接続がリセットされた
TCP ソケット接続を介して 212 KByte のバッファを送信しようとしていますが、応答として RST パケットを受信し、ピア エラーによって接続がリセットされます。
SO_RCVBUF および SO_SBNBUF プロパティを 256 KB に変更し、max_buf システム プロパティも > 256 K であることを確認しました。それでも、大きなデータを送信しようとすると、接続に失敗します。
私はソケットプログラミングが初めてなので、さらに情報が必要な場合はお知らせください。いくつかのソケット オプションが不足していると思います。
OS:solaris sparc
linux - インストールされているシグナルハンドラーを確認しています
デバッグ目的でSIGSEGVのシグナルハンドラーをインストールするライブラリがあります。SIGSEGVハンドラーは、いくつかの情報を出力してから、プログラムを終了します。
最近、Javaから(JNIを使用して)このライブラリを呼び出す必要がありました。私が遭遇した問題は、JVMが私よりも便利な目的でSIGSEGVのシグナルハンドラーもインストールすることです。
したがって、私が選択したいアクションは、ライブラリがシグナル用にすでにインストールされているシグナルハンドラーを見つけた場合、シグナルをインストールしないということです。
わかりやすくするために、私はsigactioncallを使用しています。
今、私の機能を達成するために私がしなければならないことは次のとおりです。
a。すべての信号をブロックします。
b。sigactionを呼び出し、oactが有効なハンドラーを返すかどうかを確認します。
c。もしそうなら、新しい行為としてoactでsigactionを呼び直してください。
d。UNBLOCK信号。
Bとcは私には面倒なようです。私が望んでいるのは、最初にハンドラーを置き換えてから元のハンドラーに再置き換えなくても、特定の信号に既にハンドラーがあるかどうかを判断できるようにすることです(何も達成されません)。
sigactionよりも細かいものはありますか?
c - 通常のファイル(パイプやFIFOではなく)へのアトミック書き込みを標準でどのように指定しますか?
posix 標準では、パイプまたは FIFO への PIPE_BUF バイト未満の書き込みがアトミックに許可される場合、つまり、書き込みが他のプロセスと混在しないことが指定されています。しかし、通常のファイルについて標準がどのように指定されているかを見つけることができませんでした。つまり、PIPE_BUF 未満の書き込みを行うと、アトミックも許可されるというのは本当です。しかし、通常のファイルにはそのような制限があることを知りたいですか? つまり、パイプには容量があるため、パイプに書き込み、その容量を超えると、カーネルはライターをスリープ状態にするため、他のプロセスは書き込みの機会を得ますが、通常のファイルにはそのような必要はないようです制限、そうですか?
私がやっていることは、いくつかのプロセスがログをファイルに生成することです。もちろん、O_APPEND が設定されています。
x86 - rdtscの戻り値は、AtomN450では_always_mod 10==0です。
私のE8200ボックスではこれは発生しませんが、Atom N450ネットブック(両方ともOpenSuse 11.2を実行)では、CPUのTSCを読み取るたびに、戻り値はmod 10 == 0
、つまり、余りが10で割り切れない状態です。RDTSCを使用しています興味深いコードがかかる時間を測定するための値ですが、デモンストレーションの目的で、この小さなプログラムを作成しました。
(私は通常、変換に独自のルーチンを使用しますが、読者がエラーが存在する可能性があることを示唆しないようにするために、ここではprintf()を使用しています。)
上記のコードでは、出力は(たとえば)次のようになります。
簡単にわかるように、デルタは妥当な量で変化します。しかし、目立つのは(共謀しているとは言えませんが;-)、最下位の10進数が常に0であるということです。
私はこの現象を2年以上観察してきましたが、StackOverflowはこの問題を公開する最初のアドレスではありません。しかし、私はまだどこにも合理的な答えを得ることができませんでした。私たち(私や他の人々)が思いついたアイデアは、
- TSCは10サイクルごとにのみインクリメントされますが、その後10ずつインクリメントされます。
- TSCは内部で正しく更新されますが、10サイクルごとにのみ外部に反映されます。
- TSCはサイクルごとに10ずつ増加します。
ただし、これらの点はどれも実際には意味がありません。E8200(現在は故障しています)でそのようなプログラムを実際に実行して、デルタの大きさのオーダーが上記の出力のオーダーと同じか、それとも10分の1にすぎないかを確認する必要があります。(ボランティアはいますか?)
グーグルは役に立たなかった、インテルのマニュアルも役に立たなかった。
他の人と話し合うとき、同じ行動を経験した人は他にいませんでした。カーネルと関係がある場合、少なくとも3つのバージョンが影響を受けましたが、カーネルはそれと何の関係がありますか?
ネットブックも稼働していて、新しいマザーボードが戻ってきました。これは、新しいCPUを意味するため、N450の少なくとも2つの個別のエンティティが影響を受ける必要があります。
また、クロック周波数の変化に対する対策を講じ(クロックを固定した周波数に関係なく、値は予想される範囲でのみ変化しました(図と同じ))、HTをオフにしましたが、これらは実際にそれらを防ぐのではなく、他のいくつかの最下位桁。しかし、念のために。
さて、誰かが自分のマシンでプログラムを実行したい場合、コマンドラインは次のとおりです(ソースをファイルに保存する場合rdtsc.s
):
gccフロントエンドでビルドするには、つまり
_start:
ラベルを追加(またはラベルを置き換える)しmain:
て、グローバルにする必要があります。
[更新(2012-09-15〜21:15 UTC):実際には以前にもこれを行うことができました:の前後にTSCを取得させるだけでsleep(1)
、1,666,000,000をわずかに超えるデルタが得られます。上記のリストのポイントが間違っています。しかし、それでも私は完全な精度が得られない理由がわかりません。/アップデート]
linux - 共有ライブラリでのシンボル名の解決 (Linux)
Linuxで動的バイナリ分析を行っています。プログラムが動的にリンクされており (読み込み時リンク)、アドレス空間のランダム化がない場合、標準ライブラリ関数が呼び出されている場合は関数名を解決する必要があります。逆アセンブルされたコードで、標準ライブラリルーチンへの呼び出しが最初に .plt セクションのアドレスに分岐し、PC がそこで計算されたメモリアドレスでロードされているのを見ました。ところで、それはARM Linuxにありますが、一般的な考え方は同じだと思います。
私はシステムプログラミングの初心者です。ライブラリがどのようにリンクされ、実行時にアドレスが解決されるかについては、あまり知りません。専門家からのアイデアを歓迎します。
linux - dup2 を使用して手動パイピングを複製すると、説明のつかない動作が発生する
動作するものと動作しないもののようなものを実行しようとする 2 つのコード セットがありますls|grep pip
。
作業コードは2つの子プロセスを作成し、それぞれ1つの子を使用して1つのコマンドを実行し、もう1つは1つの子を作成してこれを実行しようとします。つまり、子で ls を実行し、親で grep を実行します。これはうまくいかないようです。また、エラーも発生しないようです。
誰かが私に何が問題なのか教えてもらえますか? そして、なぜそれが存在するのですか?
動作しない:
コードは次のとおりです。
働く: