問題タブ [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.
c++ - RFC /アドバイス: セキュア/セキュアでない rpc/event-stream プロトコルの設計について
SSL は、私がやりたいことに対してかなり肥大化しているように見えます。また、私は OpenSSL に対して情熱的な憎しみを持っています (NSS が使用できる可能性があります)。RPC / 暗号化された RPC / イベント ストリーム / 暗号化されたイベント ストリームに使用される 2 つのノード間で TCP チャネルを開く必要があります。プロトコル バッファを使用して、さまざまなトラフィック ソースを定義および多重化しています。
最初から SSL を使用したくありません。暗号化されたイベント ストリームと暗号化された RPC を暗号化および復号化するには、認証された安全なキー確立 (認証された diffie-hellman) と、おそらくブロック暗号ベースのストリーム オブジェクトが必要です。
私が最初に考えたのは、SSL 実装からソケット ハンドルを取得し、それを暗号化されていない交換と暗号化された交換に使用できるという条件で、SSL 実装に基づいて構築することで、コーディング時間と設計時間を節約することでした。しかし、これはおそらく醜い実装になるでしょう。私が知っている限りでは、これを行うと ssl プロトコルと互換性がない可能性があります (つまり、TCP 状態と SSL 状態の間の強い結合)。
私が考えた 2 番目の考えは、複数のソケットを開くことで、コーディング時間と設計時間を節約することでした。しかし、マルチソケット プロトコルの設計が悪いことは誰もが知っていることです。
3 番目の考えは、すべてを暗号化するというものでしたが、問題のサービスは高性能イベント スイッチとして機能し、同じマシン上でデータベース サーバーも実行されています。トラフィックの大部分がクリアテキストになるため、このアプローチのオーバーヘッドは満足できません。
したがって、これらのアプローチは私には満足のいくものではないようです。したがって、cryptpp と boost::asio を使用することで、独自のソリューションを展開し、独自のプロトコルを構築できるという結論に達しました (これは既に行う必要があります)。私は非常に有能なシステム プログラマーであり、暗号化技術の適用を理解しているエンジニアがいます。
私はすべて再利用に賛成です。この場合、SSL を再利用できればいいのにと思いますが、できないと思います。同様の状況での経験 (ネットワーク プロトコルを設計または作業したことがある必要があります) からのアドバイスをいただければ幸いです。私に最も大きな印象を与えるアドバイスがカチカチ音をたてます.:D
ps、私のアプリケーションは、とにかく cryptopp をプルしているエキゾチックな暗号化も実行する必要があります。
c - ReadDirectoryChangesWAPIを使用したディレクトリの監視
ReadDirectoryChangesWAPIe:\test
を使用してディレクトリを監視しようとしています。
私のコード:
LPOVERLAPPED
ReadDirectoryChangesWのドキュメント、特にパラメータを完全に理解していないため、コードの何が問題になっているのかわかりません。
コードを実行すると、空白のコンソールウィンドウを除いて、何も出力されません。誰かが私を正しい方向に向けることができますか?
ありがとう。
c - プログラムでインターネット接続を開始するにはどうすればよいですか?
ブロードバンド (PPOE) インターネット接続をプログラムで開始したいと考えています。
ドキュメントにはモデムを使用してインターネットへの接続を開始すると明確に記載されているため、InternetDialが機能するかどうかはわかりません。
API 関数を検索しようとしましたが、見つかりませんでした。
ユーザー名とパスワードを取得してインターネットに接続するプログラムを作成しようとしています。このプログラムに似ています。
このプログラムを自分で実装したいので、今は API 関数の名前だけが必要です。
ありがとう。
c - / proc / pid/memのmmap
Linuxカーネル2.6で/proc/ pid / memファイルをmmapすることに成功した人はいますか?ENODEV(そのようなデバイスはありません)エラーが発生します。私の電話は次のようになります。
そして、デバッグ中に/ proc / pid / mapsファイルを調べて、実行がこの呼び出しに達すると、offsetがスタックの最上位からPAGE_SIZEを引いた値になることを確認しました。また、ptraceを使用して、mmapがerrnoをENODEVに設定していることを確認しました。
c - プロセスデーモンの作り方
プログラムをデーモンにする方法を理解しようとしています。一般に、プログラムはデーモンになるために次の手順を実行します。
- コールし
fork( )
ます。 親で、 を呼び出します
exit( )
。これにより、元の親 (デーモンの祖父母) は、その子が終了したこと、デーモンの親が実行されなくなったこと、およびデーモンがプロセス グループ リーダーではないことを確認できます。この最後のポイントは、次のステップを正常に完了するための要件です。を呼び出し
setsid( )
て、デーモンに新しいプロセス グループとセッションを与えます。どちらもそれをリーダーとして持っています。これにより、プロセスに制御端末が関連付けられていないことも保証されます (プロセスが新しいセッションを作成したばかりで、セッションを割り当てないため)。を介して、作業ディレクトリをルート ディレクトリに変更し
chdir( )
ます。これは、継承された作業ディレクトリがファイルシステムのどこにでもある可能性があるためです。デーモンはシステムの稼働時間中に実行される傾向があり、ランダムなディレクトリを開いたままにしたくないため、管理者がそのディレクトリを含むファイルシステムをアンマウントできないようにします。すべてのファイル記述子を閉じます。
- ファイル記述子 0、1、および 2 (標準入力、標準出力、および標準エラー) を開き、それらを にリダイレクトします
/dev/null
。
このプロセスをより深く理解できるように、Apache などのプログラムの既存のソース コードへのリンクを教えてください。
operating-system - ハードウェア対応OS機能
主要なハードウェアでサポートされているオペレーティング システム (汎用) の機能またはそのカテゴリを知りたいです。参照できるリンクや参考資料はありますか?
multithreading - RUSAGE_THREAD ダーウィンと同等?
ダーウィンで個々のスレッドの CPU 使用率を測定する必要があります。Linux では getrusage(RUSAGE_THREAD, ...) を使用しますが、darwin では使用できません。
c - プログラミング言語を書くのに適した C 以外の、ランタイムのないプログラミング言語は何ですか?
私はおもちゃのプログラミング言語を書くという趣味を探しています。一部は他の言語に対する小さな煩わしさから、一部はそれがどのようなものかを理解できるようにするためですが、ほとんどはただふざけているだけです。
それが本当に便利になる可能性が低い場合は、別のプログラミング言語の実行時に、その言語で書かれたプログラムを実行することに依存したくありません。つまり、インタープリター/コンパイラー自体を、ターゲット OS にネイティブにコンパイルされたプログラムにする必要があります (言語自体がインタープリター/ランタイムを提供する場合があります)。
C以外にこれを行う代替手段はありますか? いくつかの利点/欠点、またはそれぞれの使用方法は何ですか?
明確化 1: カーネル、ファイルシステム、デバイス ドライバー、ブート ローダーを作成するのに十分な低レベルになるつもりはありません。しかし、私は自分の記憶を管理できるようにしたいと考えています。
明確化 2: 用語の誤り/誤解が原因で、さまざまな OS で実行されている C ランタイムに慣れていたので、C にはランタイムがないと言いました / または、ランタイムには興味がありません。私が本当に望んでいることは、ブートストラップ言語から追加のソフトウェアをインストールする必要なく、私のプログラムがターゲット (デスクトップ) OS にネイティブにコンパイルされることです。
2.1: Python でコンパイラ/インタープリタを作成する場合、出力される実行可能ファイルを Python プログラムに依存させたくありません。
2.2: たとえば、perl を使用してプログラムをコンパイルするためにコンパイル手順を使用する場合、発行された実行可能ファイルが libperl.dll/so に依存することは望ましくありません。
2.3: 多くのコア OS ツールが C ランタイムに依存しているため、通常、ほとんどすべてのデスクトップ OS に C ランタイムがインストールされているため、例外は C ランタイムです。
c++ - allocaの使用と悪用について
私はソフトリアルタイムイベント処理システムに取り組んでいます。非決定的なタイミングを持つコード内の呼び出しを最小限に抑えたいと考えています。文字列、数字、タイムスタンプ、および GUID で構成されるメッセージを作成する必要があります。おそらくstd::vector
のboost::variant
の。
私はいつもalloca
似たような性質の過去のコードで使いたいと思っていました。ただし、システム プログラミングの文献を調べると、この関数呼び出しに対して常に大きな注意が払われています。個人的には、過去 15 年間、仮想メモリを持たないサーバー クラスのマシンは考えられません。また、Windows スタックが一度に 1 ページずつ仮想メモリを拡張するという事実を知っているので、ユニスも同様です。ここには(もう)レンガの壁はありません。スタックはヒープと同じくらいスペースが不足する可能性があります。人々がアロカよりもガガにならないのはなぜですか? alloca を責任を持って使用する多くのユースケースを思いつくことができます (文字列処理は誰ですか?)。
とにかく、パフォーマンスの違いをテストすることにしました (以下を参照)。alloca と malloc の間には 5 倍の速度の違いがあります (テストは alloca の使用方法をキャプチャします)。それで、物事は変わりましたか?風に注意を払い、オブジェクトの寿命を完全に確信できる場合はいつでもalloca
( a でラップされた) を使用する必要がありますか?std::allocator
私は恐怖の中で生きることにうんざりしています!
編集:
わかりましたので、制限があります。Windowsの場合、これはリンク時間の制限です。Unix の場合、調整可能のようです。ページアラインされたメモリアロケータが順番にあるようです:D 汎用のポータブル実装を知っている人はいますか:D ?
コード:
出力:
--編集: ホーム マシン、clang、および google perftools での結果--
c - pthread_join() の呼び出し後のセグメンテーション違反
POSIX pthread ライブラリを使用して次のコードを作成しました。
コードを実行すると、次の出力が得られました。
私が調べたように、pthread_join を呼び出すスレッド (pid2) は、引数 (pid1) で渡されたスレッドが pthread_exit() を呼び出すまでブロックされます。また、pthread_exit() は、特定のスレッドの実行を停止して、他のすべてのスレッドの実行を継続させるために使用されます。
最後にセグメンテーション違反が発生した理由を知りたいです。
きちんと説明してください。