1. c语言高手们请问一下-stat这个怎么用行么
1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。
函数原型
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
提供文件名字,获取文件对应属性。
int fstat(int filedes, struct stat *buf);
通过文件描述符获取文件对应的属性。
int lstat(const char *restrict pathname, struct stat *restrict buf);
连接文件描述命,获取文件属性。
2 文件对应的属性
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
可以通过上面提供的函数,返回一个结构体,保存着文件的信息。
main()
{
struct stat buf;
stat("当前目录下的文件名字",&buf);
printf("%ld",buf.st_blksize);
}
2. C语言 stat()这个函数是怎样实现的
简单的说,文件的相关信息会记录在文件系统里,stat 只要读一下就可以了。都不用访问文件本身。文件系统的逻辑结构还是应该了解一下,因为在编程的过程中会频繁用到。
3. C语言关于获得stat函数的文件信息实例
比如我在c程序里,用system调用一个shell的命令,如何用times()这个函数统计函数获得。关于
sysconf()
函数的头文件的一个枚举};
实例验证
4. 如何用C语言查看文件属性
已修改答复,请试验~~
如果实在linux下,你可以用stat()函数查看,Windows下我不知道函数,通常我是在linux下做的。。
不过在Windows下,你可以使用
需要包含
#include
system("attrib"
+
szFileName);
看看,szFileName是你的文件名,写入
双引号
内~
比如文件叫a.c
你就
system("attrib
a.c");
即可~
5. stat是什么
最佳答案检举 硬盘接口的一种,是一种标准
有关于各种SATA标准的术语目前看起来就是一团迷雾。Serial ATA Working Group受命建立和发展Serial ATA规范,现在已经改名为SATA-IO(SATA International Organization,SATA国际组织)了,其在官方站点(www.searialata.org)上进行澄清,SATA II不是SATA 3Gb/s的名字而是一个制定SATA规范的组织/团队的名字,3Gb/s仅仅是SATA II组织制定的各种特性之一——这个也是混乱的根源。SATA的真正标准,按照SATA-IO目前的做法应该是Serial ATA版本、加上传输界面传输速度、再加上扩展特性而成,目前是Serial ATA 1.0a、1.5Gb/s和3.0Gb/s、以及Extensions to Serial ATA 1.0a, Revision 1.2。
SATA组织/团队(就是SATA-IO)完成Serial ATA 1.0a规范之后,SATA II组织/团队(事实上也是SATA-IO)便进行对Serial ATA 1.0a进行扩展,得到的结果,就是Extensions to Serial ATA 1.0a, Revision 1.2(当前版本),这些扩展大大增强了SATA的能力。Extensions to Serial ATA 1.0a,可以称之为SATA1.0a扩展,包含了一系列的规格,这些附加的属性和能力被定义为可选的,原意是让厂商/客户可以根据实际市场的需要进行部署。这样市面上千奇百怪的控制器/硬盘具有不同的特性就不足为奇了。
Serial ATA 1.0a规范里面并没有对界面传输速率进行规定,事实上,Extensions to Serial ATA 1.0a, Revision 1.2也没有。界面传输速率于它们是无关的。按照传输信号来划分,SATA 150MB/s也就是SATA 1.5Gb/s属于Serial ATA Generation-1 Signaling Rate(第一代SATA速率),SATA 300MB/s也就是SATA 3Gb/s则属于Serial ATA Generation-2 Signaling Rate,未来的SATA 600MB/s—SATA 6Gb/s则属于Serial ATA Generation-3 Signaling Rate,去掉“Signaling Rate”、剩下Serial ATA Generation-1这样的表述也可以使用。
说完这些官方的SATA标准,就不能不提到Intel(联合多个厂商)提出的AHCI(Advanced Host Controller Interface,高级主机控制器界面)。AHCI相当于在控制器方进行的对SATA1.0a扩展的一种重定义,它支持一系列的SATA1.0a扩展属性,当然,AHCI包含的这些SATA1.0a扩展属性跟SATA硬盘的SATA1.0a扩展属性不一定是一致的。AHCI定义了与SATA设备通讯的一个界面,与原始的基于Port方式的与SATA设备通信的方式不同,AHCI提供的是基于系统内存的通信方式,这一点看起来就跟传统的DMA(Direct Memory Access)方式类似:ACHI控制器直接将数据读出或者存储到内存,软件无需看到(也看不到)I/O Port,所要发送的指令就简单多了,也节约了CPU资源。
在将界面重新定义的过程中,AHCI实现了如NCQ、Hot Plug(热插拔)这样的功能。AHCI规范目前的版本为1.1。
最后,ACHI也没有对界面传输速率进行规定,所以就出现了属于SATA 1.5Gb/s(Serial ATA Generation-1)的ICH6R支持AHCI,属于SATA 3Gb/s(Serial ATA Generation-2)的ICH7R也支持AHCI的情形。理论上讲新标准是可以向下兼容的,不过是降速使用了,也就是说你用SATA2的硬盘在SATA上使用时,其传输速率是运行在150上的。
6. C语言 stat()函数获得文件大小需不需要打开文件就是stat()函数是怎么获得文件的大小的
stat函数不需要,只要文件名就行(你的文件在当前路径下,要不还需将路径名加上),int state(const char * path,struct stat *buf);这是函数原型。在struct state这个结构体中有个st_size这个变量,他就是文件大小的变量。具体你可以查一下man手册。与它类似的还有一个fstat,他需要open文件得到文件描述符。
7. 如何用C语言获取文件的大小
1.先用fseek将文件指针移到文件末尾,再用ftell获取文件内指针当前的文件位置。这个位置就是文件大小。
2.#include<stdio.h>
intmain()
{
FILE*pf=fopen("F:/1.png","rb");
if(!pf)
return-1;
fseek(pf,0,SEEK_END);//移到文件末尾
printf("size=%d
",ftell(pf));
fclose(pf);
return0;
}
3.运行结果如下
8. C语言如何获取文件信息stat这个函数如何使用 - C / C++ -
stat(取得文件状态)
相关函数 fstat,lstat,chmod,chown,readlink,utime
表头文件 #include <sys/stat.h>
#include <unistd.h>
定义函数 int stat(const char * file_name,struct stat *buf);
函数说明 stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中。
下面是struct stat内各参数的说明
struct stat
{
dev_t st_dev; /*device*/
ino_t st_ino; /*inode*/
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 type */
off_t st_size; /*total size, in bytes*/
unsigned long st_blksize; /*blocksize for filesystem I/O */
unsigned long st_blocks; /*number of blocks allocated*/
time_t st_atime; /* time of lastaccess*/
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};
st_dev 文件的设备编号
st_ino 文件的i-node
st_mode 文件的类型和存取的权限
st_nlink 连到该文件的硬连接数目,刚建立的文件值为1。
st_uid 文件所有者的用户识别码
st_gid 文件所有者的组识别码
st_rdev 若此文件为装置设备文件,则为其设备编号
st_size 文件大小,以字节计算
st_blksize 文件系统的I/O 缓冲区大小。
st_blcoks 占用文件区块的个数,每一区块大小为512 个字节。
st_atime 文件最近一次被存取或被执行的时间,一般只有在用mknod、utime、read、write与tructate时改变。
st_mtime 文件最后一次被修改的时间,一般只有在用mknod、utime和write时才会改变
st_ctime i-node最近一次被更改的时间,此参数会在文件所有者、组、权限被更改时更新先前所描述的st_mode 则定义了下列数种情况
S_IFMT 0170000 文件类型的位遮罩
S_IFSOCK 0140000 scoket
S_IFLNK 0120000 符号连接
S_IFREG 0100000 一般文件
S_IFBLK 0060000 区块装置
S_IFDIR 0040000 目录
S_IFCHR 0020000 字符装置
S_IFIFO 0010000 先进先出
S_ISUID 04000 文件的(set user-id on execution)位
S_ISGID 02000 文件的(set group-id on execution)位
S_ISVTX 01000 文件的sticky位
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限
上述的文件类型在POSIX 中定义了检查这些类型的宏定义
S_ISLNK (st_mode) 判断是否为符号连接
S_ISREG (st_mode) 是否为一般文件
S_ISDIR (st_mode)是否为目录
S_ISCHR (st_mode)是否为字符装置文件
S_ISBLK (s3e) 是否为先进先出
S_ISSOCK (st_mode) 是否为socket
若一目录具有sticky 位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。
返回值 执行成功则返回0,失败返回-1,错误代码存于errno
错误代码 ENOENT 参数file_name指定的文件不存在
ENOTDIR 路径中的目录存在但却非真正的目录
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
EFAULT 参数buf为无效指针,指向无法存在的内存空间
EACCESS 存取文件时被拒绝
ENOMEM 核心内存不足
ENAMETOOLONG 参数file_name的路径名称太长
范例 #include <sys/stat.h>
#include <unistd.h>
mian()
{
struct stat buf;
stat (“/etc/passwd”,&buf);
printf(“/etc/passwd file size = %d /n”,buf.st_size);
}
9. c语言stat函数
errno错误代码:
1ENOENT参数file_name指定的文件不存在
2ENOTDIR路径中的目录存在但却非真正的目录
3ELOOP欲打开的文件有过多符号连接问题,上限为16符号连接
4EFAULT参数buf为无效指针,指向无法存在的内存空间
5EACCESS存取文件时被拒绝
6ENOMEM核心内存不足
7ENAMETOOLONG参数file_name的路径名称太长
这里很可能是 4