标签: stat

使用fstat()和stat()有什么好处?

如果我有一个已知的文件描述符打开的文件,什么是使用的优点fstat(),对stat()?为什么不只有一个功能?

int fstat(int fildes, struct stat *buf)

int stat(const char *path, struct stat *buf)
Run Code Online (Sandbox Code Playgroud)

c file system-calls stat fstat

8
推荐指数
2
解决办法
7606
查看次数

stat系统调用的st_mode的标志

我正在尝试理解该stat命令的stat结构的st_mode字段的标志,但是我有这么难的时间!我在这里找到了这个例子,但我真的不明白这个代码片段:

if ( mode & S_IRUSR ) str[1] = 'r';    /* 3 bits for user  */
if ( mode & S_IWUSR ) str[2] = 'w';
if ( mode & S_IXUSR ) str[3] = 'x';

if ( mode & S_IRGRP ) str[4] = 'r';    /* 3 bits for group */
if ( mode & S_IWGRP ) str[5] = 'w';
if ( mode & S_IXGRP ) str[6] = 'x';

if ( mode & S_IROTH ) str[7] = 'r';    /* 3 …
Run Code Online (Sandbox Code Playgroud)

c unix filesystems stat

7
推荐指数
1
解决办法
2万
查看次数

如何从用户标识中检索用户名

我正在从一本书中学习,在Unix上实现(ls)命令.在使用(-l)标志执行(ls)命令的编码部分期间,我看到我必须提示文件的用户名和组名.到目前为止,我有以下几行中的用户和组ID:

struct stat statBuf;

statBuf.st_uid; //For the user id. 
statBuf.st_gid; //For the group id. 
Run Code Online (Sandbox Code Playgroud)

在Unix上的默认(ls)命令中,打印文件的信息的方式是显示用户名而不是用户ID.

任何人都可以帮我找到正确的方法来从他们的ID中检索用户名和组名吗?

c unix file-descriptor system-calls stat

7
推荐指数
2
解决办法
1万
查看次数

什么是windows中的lstat()替代品?

在linux中,当stat()与断开的链接文件一起使用时,它会失败-1.所以我用了lstat()哪个成功了.

对于Windows中的相同情况,_stat()失败的快捷方式失败,但_lstat()在Windows中没有.请帮助lstat()在Windows中找到替代方案.

c stat

7
推荐指数
2
解决办法
7635
查看次数

golang os*File.Readdir在所有文件上使用lstat.可以优化吗?

我正在编写一个程序,它从父目录中查找包含大量文件的所有子目录os.File.Readdir,但运行一个strace查看系统调用的计数表明go版本使用的lstat()是所有文件/目录.父目录.(我现在用/usr/bin目录测试这个)

去代码:

package main
import (
        "fmt"
    "os"
)
func main() {
    x, err := os.Open("/usr/bin")
    if err != nil {
        panic(err)
    }
    y, err := x.Readdir(0)
    if err != nil {
        panic(err)
    }
    for _, i := range y {
    fmt.Println(i)
    }

}
Run Code Online (Sandbox Code Playgroud)

程序上的Strace(没有跟随线程):

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 93.62    0.004110           2      2466           write
  3.46    0.000152           7        22           getdents64
  2.92    0.000128           0      2466 …
Run Code Online (Sandbox Code Playgroud)

c linux filesystems go stat

7
推荐指数
1
解决办法
622
查看次数

在 node.js 中,我如何知道 fs.stat() 是否会为给定的文件/路径/卷/fs 返回可用的 crtime 和/或出生时间字段?

我最近了解到,不同的操作系统甚至同一操作系统下的不同文件系统都支持lstat.

返回的Stats对象给了我们四次,每次都有两种不同的味道。

js日期对象:

  • atime:自 POSIX Epoch 以来该文件最后一次被访问的时间以毫秒表示
  • mtime: 最后一次修改这个文件...
  • ctime: 上次更改文件状态...
  • birthtime:这个文件的创建时间

( atimeMs, mtimeMs, ctimeMs, 和birthtimeMs是上述每个的 js 日期对象版本)

“已修改”表示文件的内容通过写入等方式发生了更改。“已更改”表示文件的元数据(例如所有者和权限)已更改。

Linux 传统上从不支持出生时间的概念,但随着更多更新的文件系统确实支持它,如果我没有正确阅读,它最近已经添加了对 Linux 堆栈的所有相关层的支持。

但是 Windows 和 Mac 都像它们的原生文件系统一样支持出生时间。

另一方面,Windows 传统上不支持与文件修改分开的文件更改概念。但是为了符合 POSIX,它增加了对 API 级别和 NTFS 的支持。(尽管它似乎没有在 GUI 或命令行中的任何地方公开)。FAT fs 不支持。

当我lstat在 NTFS 驱动器上调用Windows 上的文件时,结果ctime看起来不错。当我在 FAT 驱动器上的文件上调用它时,它ctime包含垃圾。(就我而言,它始终2076-11-29T08:54:34.955Z适用于每个文件。)

我不知道这是不是一个错误。

我不知道birthtimeLinux …

filesystems timestamp cross-platform stat node.js

7
推荐指数
0
解决办法
749
查看次数

确定两个文件路径是否指向Linux/C下的同一文件?

在Linux下,我有两个文件路径A和B:

const char* A = ...;
const char* B = ...;
Run Code Online (Sandbox Code Playgroud)

我现在想确定,我应该open(2)两个......

int fda = open(A, ...);
int fdb = open(B, ...);
Run Code Online (Sandbox Code Playgroud)

...我会在文件系统中打开两个文件句柄到同一个文件吗?

为了确定这一点,我想到了stat(2):

struct stat
{
    dev_t st_dev;
    ino_t st_ino;
    ...
}
Run Code Online (Sandbox Code Playgroud)

像(伪代码)的东西:

bool IsSameFile(const char* sA, const char* sB)
{
    stat A = stat(sA);
    stat B = stat(sB);

    return A.st_dev == B.st_dev && A.st_ino == B.st_ino;
}
Run Code Online (Sandbox Code Playgroud)

有没有A和B是同一个文件但IsSameFile会返回false的情况?

是否有任何情况下A和B是不同的文件但IsSameFile会返回true?

有没有更好的方法来做我想做的事情?

c linux filesystems stat

6
推荐指数
1
解决办法
2236
查看次数

将size_t转换为字符串

我正在尝试编写一个TCP服务器,客户端可以使用它来浏览服务器的目录.除此之外,如果是常规文件,我想发送目录的大小.文件的大小保存在"stat"结构下的size_t变量中.我在这做这个:

char *fullName  /* The path to the file *.
/** 
  * Some code here
  */
struct stat buffer;
lstat(fullName, &buffer)
Run Code Online (Sandbox Code Playgroud)

所以现在buffer.st_size包含文件的大小.现在我想写()它到监听套接字,但显然我必须以某种方式将其转换为字符串.我知道这可以通过按位右移(>>)运算符以某种方式完成,但对我来说似乎太痛苦了.你能帮帮我吗(即使其他那些按位运算符也没办法)?

顺便说一句,这不适合学校或smth ......

PS:我在Linux上运行它.

c linux posix size-t stat

6
推荐指数
1
解决办法
1万
查看次数

读取proc stat信息

您好,我需要有关具有某些 PID 的进程的以下信息:

名称、ppid、状态、#ofOpenFiles、#ofThreads

我知道 /proc/pid/stat 文件的示例如下:

15(看门狗/1) S 2 0 0 0 -1 69239104 0 0 0 0 0 69 0 0 -100 0 1 0 6 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 1844674407370 9551615 0 0 17 1 99 1 0 0 0 0 0 0 0 0 0 0 0

我当前尝试解析此类文件:

FILE *fp;
           char buff[255];
           fp= fopen("/proc/123/stat", "r");
           if(fp == NULL){

           }else{

             fscanf(fp, "%d %s %c %d %d %d %d %d …
Run Code Online (Sandbox Code Playgroud)

c unix pid stat proc

6
推荐指数
1
解决办法
1万
查看次数

如何 asyncio 安排文件系统统计操作?

将一些代码转换为使用asyncio,我想尽快将控制权交还给asyncio.BaseEventLoop。这意味着避免阻塞等待。

如果没有 asyncio,我会使用os.stat()pathlib.Path.stat()获取例如文件大小。有没有办法用 asyncio 有效地做到这一点?

我可以结束stat()通话,使其成为类似于此处描述的未来吗?

python stat python-3.x python-asyncio

6
推荐指数
1
解决办法
703
查看次数