問題タブ [stat]
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 - ユーザーIDからユーザー名を取得する方法
本から学びながら、Unix で(ls)コマンドを実装しています。(-l) フラグを指定した(ls)コマンドの実装のコーディング部分で、ファイルのユーザー名とグループ名を入力する必要があることがわかりました。これまでのところ、次の行からユーザー ID とグループ ID を取得しています。
Unixのデフォルト(ls)コマンドでは、ファイルの情報は、ユーザー ID の代わりにユーザー名が表示されるような方法で出力されます。
ID からユーザー名とグループ名を取得するための正しい方法を見つけるのを手伝ってくれる人はいますか?
python - パス上のファイルデータが変更されていないことを識別する情報は何ですか?
指定されたパスのファイルデータを操作する関数の結果をメモしたいと思います。最後に処理してからファイルデータが変更されたかどうかを確認するにはどうすればよいですか?
st_dev
、、st_ino
をst_mtime
含むキーを結果にマッピングすることを検討しています。これで十分ですか?
c - C stat構造体には、st_ctimeフィールドはなく、st_ctimのみがあります。
私はこれを約2時間グーグルで検索していますが、役立つ答えを見つけることができませんでした。
マンページで指定されている「stat」の定義は、st_ctimeフィールドが存在することを示しています。
ただし、gcc(標準に従って動作するはずです)を使用しているにもかかわらず、これは私のシステムには当てはまらないようです。
実際、すべての時間フィールド(atime、mtime、ctime)が欠落しているため、構造体には、目的のtime_t値の代わりにtimespecを返すいくつかのatim、mtim、およびctim値が含まれています。
今私の質問:
- なんでそうなの?間違ったヘッダーを含めたのかもしれませんが、sys/stat.hである必要があると確信しています。
- 私はtimespecについてあまり多くの情報を見つけていません、それは何ですか、そしてなぜそれはここに返されますか?
- 回避策を見つけたとしても、それは助けになりますか、それとも他のシステムが私のコードを実行できなくなりますか?
Ubuntu11.10とgcc4.6.1を使用しています。
私のコード(部分的に):
これを手伝っていただければ幸いです。構造体のst_ctimeフィールドを使用してコンパイルできない理由がわかりません。いつものように、gccはエラーについて話すときにあまり役に立ちません。 -)
おそらくそれは#includeの問題で何かをしなければなりませんが、私は何を決定することができません。
c - STAT ブロックサイズ/使用ブロック
私を混乱させる質問があり、私の仕事は断片化を解決することです。
st_blksize はファイル システムの一般的なブロック サイズであるといくつかの場所で読みましたが、この場合4096
、そのファイルは に収まります。これは3 blocks
、割り当てられているにもかかわらず、未使用のスペースがあること10520 / 512
を20.5
意味します。これは、このファイルに未使用のバイト3.5 blocks
があることを意味しますか (断片化)?1792
私が言及したように、私はこれをかなり読んで、矛盾するテキストをたくさん読んだので、誰かにこれをきっぱりと片付けてもらいたいです!
c - MINIX 内部フラグメンテーション 2
特定のディレクトリ内のすべてのファイルを再帰的にリストするソフトウェアをCで作成している最中で、内部の断片化を解決する必要があります。
私はこれを調査するのに長い時間を費やしましたが、ext2 の内部フラグメンテーションは最後のブロックでのみ発生することがわかりました。理論的には inode 番号から最初と最後のブロック アドレスを取得できるはずですが、方法がわかりません。
stat()
、fcntl()
およびあらゆる種類の方法を調べました。inode 番号から最後のブロック アドレスを取得するにはどうすればよいですか?
また、最後のブロックのアドレスを取得したら、そのブロックにどれだけの空き領域があるかをテストして、内部の断片化を確認できることもわかりました。
get_inode
とget_block
コマンドがあることは知っていますが、それ以外はわかりません!
c - C stat()はファイルを無視します
Cのstat関数に問題があります。アプリケーションは2つのディレクトリ(2番目のディレクトリはまだ実装されていません)にあるすべてのファイルを一覧表示する必要があります。dir1が「。」に設定されている場合。現在のディレクトリの場合は、すべてのファイルが一覧表示されます。必要なディレクトリに変更すると、1つのファイルしかリストされません。
プログラムを実行した結果は次のとおりです。
これは、読み取っているディレクトリ内のlsの結果です。
トム、よろしくお願いします。
c - ヒューズファイルシステムは、getattr 関数で struct stat *stbuf の値を変更できませんか?
疑問解決!struct stat
@basile-starynkevitch のおかげで、 が異なるファイルで同じサイズではない
ことがわかりました!
では88 バイトですが<sys/stat.h>
、sizeof(struct stat)
fuse の lib では (-D_FILE_OFFSET_BITS=64
フラグの関係だと思います)、これは 96 バイトです。
したがって、リモート サーバーにヒューズ ライブラリを追加すると ( -D_FILE_OFFSET_BITS=64 /usr/local/lib/libfuse.so /usr/local/lib/libulockmgr.so
gcc にフラグを追加)、プログラムが正しく実行されます。
あなたの助けに感謝します!
私はヒューズでいくつかのプロジェクトを行っていますが、それは私を夢中にさせました。
リモートサーバーから struct stat *stbuf のデータを送信し、データはサーバーとクライアントの両方で正しいのですが、 memcpy を使用してデータを stbuf に複製すると、何もコピーされないようです。read(socked,stbuf,sizeof(struct stat)); も使用しようとしています。直接ですが、それも機能しません。
ここにコードがあります...(そのようなファイルがない場合、リモートサーバーは-ENOENTをst_inoに保存します)
gdb から取得したデータ:
read() の後、buf にデータを取得
データを stbuf にコピーする
stbuf はまったく変化しません。
そのような現象について誰かが私に何か提案をしてもらえますか? いくつかの作業を行いましたが、まだ解決策が見つかりません。
c - Cプログラミング-Statシステムコール-エラー
私はCを初めて使用しますが、いくつかのシステムコールを試しています。
ディレクトリ内のすべてのファイルを繰り返し処理し、現在のファイル名とサイズを出力するプログラムを作成しています。プログラムにファイル名を出力させることはできますが、statシステム呼び出しを実行するとエラーが発生します。
コードの一部を次に示します。
私はこのように記述された構造体を持っています:
私が変更した場合:
に
それでもループに入り、ファイル名を読み取れないと思いますが、エラーステートメントに問題なく出力されます。
誰かが私を正しい方向に向けることができますか?ありがとう!
アルカジー
node.js - fs.stat() の仕組みが理解できない
特定のパスがディレクトリであることを示す関数を作成しようとしています。
ただし、答えは出力されません。
パス名が存在する場合 - 関数は呼び出されません。存在しない場合は、例外が生成されます: ENOENT not a file or directory
. パス名が存在するかどうかは知りたくありませんが、ディレクトリかどうかは知りたいです。
誰でも私がそれを修正するのを助けることができますか?
linux - /proc/pid/stat ファイルの cstime エラー
stime
またはcstime
in /proc/pid/stat
file が大きすぎて意味がありません。しかし、一部のプロセスでは、これが間違っcstime
ている場合があります。次のように:
stime
の proc 4815, nscd
, is 1844674407359
, equal to213503-23:34:33
が、 に対して実行されていることがわかります1-01:20:02
。
プロセスが間違っている別の問題cstime
は次のとおりです。
スリープをフォークする bash フォーク a sh。
したがって、proc bash の cstime は 1844674407368 であり、その子の合計 CPU 時間よりもはるかに大きいことがわかります。
私のサーバーには、4 コアと 8 スレッドの Intel(R) Xeon(R) CPU E5620 @ 2.40GHz が 1 つあります。オペレーティング システムは、次のように Suse Linux Enterprise Server SP1 x86_64 です。
それで、それはカーネルの問題ですか?誰かがそれを修正するのを助けることができますか?