我想知道nfs共享上的可用空间和总空间
我正在使用ubuntu linux计算机。
我可以通过命令来做到这一点,但我需要一个C程序。
我查看了 libnfs.h ,它包含了一些我认为可以使用的函数声明:
EXTERN int nfs_stat(struct nfs_context *nfs, const char *path, struct stat *st);
EXTERN int nfs_fstat(struct nfs_context *nfs, struct nfsfh *nfsfh, struct stat *st);
EXTERN int nfs_statvfs(struct nfs_context *nfs, const char *path, struct statvfs *svfs);
但是我不知道应该使用哪一个以及第一个参数传递什么(什么是上下文?)
请帮助。
提前感谢您的帮助。
<小时/> 正如@remyabel建议的那样,我写了以下内容:
#include<sys/time.h>
#include<stdio.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/statvfs.h>
#include<nfsc/libnfs.h>
#define MAX 63
int main()
{
struct nfs_context *nfs = NULL;
struct statvfs st;
char path[MAX];
strcpy(path,"nfs://192.168.2.73/home/sumit/music2/");
nfs = nfs_init_context();
int ret;
ret = nfs_mount(nfs, "192.168.2.73", path);
perror("Err1");
ret = nfs_statvfs(nfs, "//", &st);
printf("\nret=%d",ret);
printf("\nf_bsize= %lu",st.f_bsize);
printf("\nf_frsize= %lu",st.f_frsize);
printf("\nf_blocks= %lu",st.f_blocks);
printf("\nf_bfree= %lu\n",st.f_bfree);
return 0;
}
现在有效:)
答案 0 :(得分:2)
还有更多内容,等待回复等等。几个月前,当我想编写一个nagios插件来检查尚未安装的文件系统上的空间时,我遇到了完全相同的问题。源代码可在http://www.gbl-software.de/nagiosbinaries/check_nfs/check_nfs-src.tgz获得,您可以随意使用和修改。这使用了来自nfsreplay的NFS库,并且具有可以为Linux,Solaris和AIX编译的优势。
请注意,对于大多数NFS服务器,您的程序需要是suid root才能使用保留端口(&lt; 1024),因为出于安全原因,NFS服务器不会与任何端口通信。
答案 1 :(得分:1)
首先,在程序开头声明上下文:
struct nfs_context *nfs = NULL;
在这里,我们将保留您想要的信息:
struct statvfs st;
然后我们初始化上下文:
nfs = nfs_init_context();
挂载共享:
struct client client;
client.server = server;
client.export = path;
client.is_finished = 0;
ret = nfs_mount(nfs, client.server, client.export);
你可以这样使用nfs_statvfs
;
ret = nfs_statvfs(nfs, path, &st);
其中nfs
是前面的上下文,path
是某个文件名或目录,st
是保存信息的结构。如果出现问题,ret
包含errno
。
这是statvfs
:
struct statvfs {
uint32_t f_bsize;
uint32_t f_frsize;
uint64_t f_blocks;
uint64_t f_bfree;