問題タブ [lseek]
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.
linux - /proc/stat ファイルをシステムコール機能 read () 経由で読み取るか、glibc 関数 fread() 経由で読み取るかの違い
read (cat など) または fread (nl など) を介して /proc/stat ファイルを読み取るプログラムは、異なる値を返します。read() /proc/stat は正しい結果を返しますが、fread() は間違った結果を返します。
私は、/proc/stat の読み取りまたは fread だけを行う単純な C プログラムを作成していました。read() は のような正しい値を返しますcat /proc/stat
。fread() は のような間違った値を返しますnl /proc/stat
。
Centos7 システムで「top」コマンドを実行し、「1」を押してすべての CPU の詳細情報を表示します。システムには 8 つの CPU コアがありますが、CPU0 の情報のみが表示されます。さらに、cpu0 の情報が間違っています。
top コマンドのソースコードを読んでみると、/proc/stat から CPU 情報を取得するために fread() を使用していることがわかりました。
/proc/meminfo のように、fread() を使用して /proc 内の他のファイルを取得しますが、これもうまく機能します。
- fread() で /proc/stat から情報を取得します(コマンド 'nl' で fread() を使用してファイルの内容を読み取ります)</li>
- read() で /proc/stat から情報を取得します(コマンド 'cat' は read() を使用してファイルの内容を読み取ります)</li>
ユーザーが read() と fread() を使用して /proc の下の他のファイルを取得するのは正常なようです
read() を使用した私の C プログラム
- fread() を使用した私の C プログラム
aschepler のアドバイザーとして、C プログラムをたどっています。:
6. read() /proc/stat の strace 情報 (結果の一部):
7、fread() /proc/stat の strace 情報 (結果の一部)
c - 文字列を上書きせずにバイナリファイルに保存する
まず第一に、これが私のコードの関連部分であり、説明に進みます。
str を「アルファ 1」として再定義する理由は、fflush を使用して scanf の後にバッファーをクリアしようとしても、fgets が入力として「/n」を取得し (私が推測する)、「名前」を出力すると、空白になります。主な問題ではありませんが、これに関するヘルプは貴重です。
これはすべてループしているので、プロンプトが表示されたら「1」を押し続けると、バイナリファイルは次のようになるはずだと思いました: alpha onealpha one alpha one ...
ただし、次のように表示されます: アルファ 1、1 を何回押しても。
カウンターを格納する他のバイナリ ファイルと同じことです。正しく更新されるため、最初のループの後には "9" が格納されますが、2 番目のループの後は "18" だけが期待されます: 9 18
lseek を完全に削除し、END ではなく CURR に設定しようとしました。同じ結果です。最大警告をオンにしましたが、コンパイル時に何も表示されません。
これは宿題なので、fopen などは使用できず、システム コマンドしか使用できないことを指摘しておく必要があります。
誰かが実行したい場合の updateCounter 関数は次のとおりです。
助けてくれてありがとう。