問題タブ [libc]
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.
msvcrt - Windows での MSVCRT は *nix での glibc (libc) のようなものですか?
MSVCRT (またはそれに相当するもの) にプログラムの実行可能ファイルがバンドルされている Windows プログラムをよく見かけます。典型的な PC では、同じ .DLL のコピーが多数見つかります。私の理解では、MSVCRT は C ランタイム ライブラリであり、*nix の glibc/libc.so に多少似ています。
システム全体で libc を共有するだけでなく、なぜ Windows プログラムは C ライブラリを一緒に持ち込まなければならないのでしょうか?
更新: Shog9 のおかげで、DLL リンケージの問題 (DLL Hell) に目を向ける SxS について読み始めました - http://blogs.msdn.com/b/martynl/archive/2005/10/ 13/480880.aspxは、この問題の便利な紹介です...
c - サイズとカウントを引数として取るfread/fwriteの理論的根拠は何ですか?
ここでは、 fread()とfwrite()がメンバーごとにサイズを取り、バッファーとサイズだけでなく、読み取り/書き込みされたメンバーの数をカウントして返す理由について話し合いました。私たちが思いつくことができる唯一の用途は、プラットフォームの配置によって均等に分割できないためにパディングされている構造の配列を読み取り/書き込みする場合ですが、これはこの選択を正当化するほど一般的ではありませんデザインで。
fread(3)から:
関数fread()は、ストリームが指すストリームから、各サイズがバイト長のデータのnmemb要素を読み取り、ptrで指定された場所に格納します。
関数fwrite()は、各サイズがバイト長のデータのnmemb要素を、streamが指すストリームに書き込み、ptrで指定された場所から取得します。
fread()およびfwrite()は、正常に読み取られた、または書き込まれた項目の数(つまり、文字数ではない)を返します。エラーが発生した場合、またはファイルの終わりに達した場合、戻り値は短いアイテム数(またはゼロ)です。
c - fopen() の代わりに open() を使用する通常の理由はありますか?
私はかなり長い間Cから離れていた後、Cで小さなプロジェクトを行っています。これらには、たまたまファイル処理が含まれています。FILE *
さまざまなドキュメントで、ハンドルを返す関数と (小さな整数) 記述子を返す関数があることに気付きました。どちらの機能セットも必要な基本サービスは同じなので、どちらを使用してもかまいません。
しかし、私はコレクションの知恵に興味があります: fopen()
and friends と and friends のどちらを使うのが良いopen()
でしょうか?
編集誰かがバッファありとバッファなし、およびデバイスへのアクセスについて言及したので、この小さなプロジェクトの一部が FUSE の下でユーザー空間ファイルシステム ドライバーを作成することを追加する必要があります。したがって、ファイル レベルのアクセスは、デバイス (CDROM や SCSI ドライブなど) に対しても、"ファイル" (つまり、イメージ) に対しても簡単に行うことができます。
networking - ソケットがメッセージを受信したインターフェイスを確認する方法は?
IN6ADDR_ANY
ソケットがまたはにバインドされていて、ソケットでメッセージを受信するINADDR_ANY
などの呼び出しを使用する場合。recvfrom()
メッセージがどのインターフェイスから来たかを調べる方法はありますか?
IPv6 リンク スコープ メッセージの場合、from 引数のフィールドがインターフェイス ID に初期化されることを期待していましrecvfrom()
たscope_id
。残念ながら0
、私のテストプログラムではに設定されています。
この情報を見つける方法を知っている人はいますか?
linux - レガシー リンカー (libc5 を使用) が Linux カーネル 2.6.25 で失敗する
libc5 を使用する従来のリンカがありますが、いくつかの要因により、ソースではなくバイナリしかありません。はい、バージョン管理があれば現在の問題は解決できたはずです...現在、この問題はツール チェーンと製品ライン全体で使用されていますが、この特定の馬はとうの昔に姿を消しました。
このリンカは Linux カーネル 2.6.24 で動作しますが、2.6.25 (および 2.6.26) では失敗し、次のメッセージが表示されます。
対応するレガシー コンパイラにも同様の問題がありましたが、stackoverflow.com の回答と多くの調査により、コンパイラの問題は Linux カーネル 2.6.25 の「brk ランダム化」が原因であることが判明しました。その回避策は、sysctl 変数と環境変数を設定することです。
ただし、これはリンカには役立ちません。
「ldd」を使用して、リンカーにはより多くの共有ライブラリの依存関係があることがわかりました (コンパイラには libc.so.5 しかありませんでした):
そして、libg++.so.27 の libc5 バージョンをインストールする必要があるかもしれないことを読みました。それが最新の libg++.so.27 を上書きし、libc5 以外のアプリで問題を引き起こすかどうかわからないので、私はそれをするのをためらっています。
では、libg++.so.27 の libc5 バージョンを見つけてインストールするか、brk のランダム化を無効にするより良い方法があるか、またはリンカーの問題を引き起こしているカーネル 2.6.24 と 2.6.25 の間に別の違いがありますか?
編集
この検索の詳細と私の最終的な解決策については、こちらを参照してください。
java - Javaのmemcmp()に相当しますか?
2つのbyte[]
配列がある場合、それらをCの配列と比較するための組み込み関数はありmemcmp()
ますか?
linux - Linux はどのように 32 ビットと 64 ビットを同時に使用できますか? それとも、それは glibc で処理されるものですか?
Linux はどのように同時に 32 ビットと 64 ビットですか? それとも、それは glibc で処理されるものですか?
CentOS 5.3 を実行していますが、これは「64 ビット」バージョンです。私は64ビットと32ビット用のものを構築していますが。私が知っていると思うことから、Windowsにはおそらく32ビットエミュレーターがあります。Linuxは同じことをしますか?ユーザー空間またはカーネル空間にありますか?
libc がそれを処理する場合、32 ビット アプリとリンクしますが、カーネルに対しては 64 ビットを話すというエミュレータのようなものですか?
visual-studio - MSVC _open/_close/etc
API の _open、_close、およびその他の標準ファイル i/o 関数の先頭にアンダースコアが付いているのはなぜですか? これらは標準の一部ではありませんか?
c - 基になるファイル記述子を閉じずにFILEポインターを閉じます
を使用するとfdopen()
、fileno()
既存のファイル記述子を使用してストリームを開くことができます。ただし、ファイルをストリームで開いた後、ファイルを閉じる適切な方法はfclose()
、FILE
ポインタを使用することです。どうすればストリームを閉じても、開いているファイル記述子を保持できますか?
この動作は、呼び出してからを呼び出してからfflush()
、閉じる場合を除いてポインタを再度fileno()
使用することはありません。FILE
さらに懸念されるのは、fdopen()
もう一度すると、複数のFILE
ポインターがあり、そのうちの1つしか閉じることができないということです。