我有下面的代码,这里只显示了它的一部分,我正在检查文件的类型.
struct stat *buf /* just to show the type buf is*/
switch (buf.st_mode & S_IFMT) {
case S_IFBLK: printf(" block device\n"); break;
case S_IFCHR: printf(" character device\n"); break;
case S_IFDIR: printf(" directory\n"); break;
case S_IFIFO: printf(" FIFO/pipe\n"); break;
case S_IFLNK: printf(" symlink\n"); break;
case S_IFREG: printf(" regular file\n"); break;
case S_IFSOCK: printf(" socket\n"); break;
default: printf(" unknown?\n"); break;
}
Run Code Online (Sandbox Code Playgroud)
问题:st_mode当我做printf("\nMode: %d\n",buf.st_mode);结果时获得的值是33188.
我用常规文件类型和符号链接测试了我的程序.在这两种情况下,输出都是"常规文件",即符号链接情况失败,我不明白为什么?
一些文件系统(例如ext4和JFS)提供纳秒级的atime/mtime字段分辨率.如何读取ns分辨率字段?该stat系统调用返回time_t其为第二分辨率.
我想展示我在功能分支上进行了多少更改(插入+删除).有没有办法获得git log --stat2次提交(分支根/提示)之间的更改的输出摘要.
谢谢.
这是我写的一个C程序,用于递归导航和输出目录和常规文件.它在我的Linux机器上编译并运行良好.但是在Solaris上,dit->d_type == 8检查和其他类似检查不起作用,因为没有d_type字段.我已经阅读过这个问题的答案是使用S_ISREG()和S_ISDIR()宏,但它们并不能完全按照我目前的代码中的方式工作.我注释掉了在我的Linux机器上运行的行.
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void helper(DIR *, struct dirent *, struct stat, char *, int, char **);
void dircheck(DIR *, struct dirent *, struct stat, char *, int, char **);
int main(int argc, char *argv[]){
DIR *dip;
struct dirent *dit;
struct stat statbuf;
char currentPath[FILENAME_MAX];
int depth = 0; /*Used to correctly space output*/
/*Open Current Directory*/ …Run Code Online (Sandbox Code Playgroud) 对于家庭作业,我必须编写一个C程序,它必须做的一件事就是检查文件是否存在以及它是否可由所有者执行.
使用(stat(path[j], &sb) >= 0我能够查看路径[j]指示的文件是否存在.
我查看了man page,stackoverflow上的很多问题和答案,以及几个网站,但我无法完全理解如何使用stat检查文件是否可执行.我认为它会很简单,((stat(path[j], &sb) >= 0) && (sb.st_mode > 0) && (S_IEXEC)但据我测试它,它似乎忽略了这些文件不可执行的事实.
我认为也许统计数据不像我认为的那样有效.假设我使用stat,我该怎么办呢?
我做了一个小的共享库,试图拦截open,open64,stat和stat64 sys调用.当我导出LD_PRELOAD并运行oracle的sqlplus时,我可以看到open和open64调用的痕迹,但没有stat和stat64调用的痕迹.共享库是一个单独的c文件,其中包含sys调用的所有定义.为什么有些系统调用被截获而其他系统没有被截获?谢谢你的帮助.
我只想尝试在R数中舍入:
> 1.327076e-09
Run Code Online (Sandbox Code Playgroud)
它应该导致
> 1.32e-09
Run Code Online (Sandbox Code Playgroud)
哪个功能可以使用?
我正在编写一个简单的文档管理脚本,需要获取文件大小和文件类型/文件或文件夹/在表中.不知怎的,它不会提到提到目录.请尽可能帮助:
<?php
$path = "./documents";
$dh = dir($path);
while( ($file=$dh->read()) )
{
if( $file=="." || $file=="..")continue;
echo "<tr><td><a href='download.php?f=$file' title='Click to Open/Download'>$file</a></td>";
echo "<td>";
echo (is_file($file))? "<img src='file.jpg'/> FILE" : "<img src='folder.jpg'/> FOLDER ";
echo "</td><td>" .filesize($file)."</td>";
echo "<td><input type='checkbox' name='delete[]'/></td></tr>";
}
?>
Run Code Online (Sandbox Code Playgroud)
它确实有2个错误 - 一个文件大小不适用于该位置,如果我将其更改为路径"." - 一切都很好,但如果我尝试更改到我需要它/文件的文件夹...一切都很糟糕,其次 - 它也没有采取正确的图标文件,相同类型的问题.谢谢
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */ …Run Code Online (Sandbox Code Playgroud) stat ×10
c ×5
linux ×3
system-calls ×2
branch ×1
file ×1
filesize ×1
filesystems ×1
git ×1
interception ×1
linux-kernel ×1
logging ×1
performance ×1
php ×1
posix ×1
preload ×1
r ×1
readdir ×1
rounding ×1
solaris ×1
statistics ×1
struct ×1
symlink ×1