This is an example of a application level disk free space command using the ConnectSMB Libraries
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <wchar.h>
#include "smbinit.h"
int main (int argc, char **argv)
{
size_t len;
mbstate_t ps;
int ret;
const char *cursor;
long int used;
long int avail;
long int total;
smbcp_init();
if (argc < 2)
{
printf ("Usage: smbfree <destination>\n");
exit (1);
}
memset(&ps, 0, sizeof(ps));
len = strlen(argv[1]) + 1;
sharename = malloc(sizeof(wchar_t) * len);
cursor = argv[1];
mbsrtowcs(sharename, &cursor, len, &ps);
printf("Finding Free Space on %s: ", argv[1]);
fflush(stdout);
&SectorsPerCluster,
&BytesPerSector,
&NumberOfFreeClusters,
&TotalNumberOfClusters);
{
printf("[failed]\n");
ret = 1;
}
else
{
printf("[ok]\n");
printf("Free Space On %ls\n", sharename);
printf(" Sectors Per Cluster: %d\n", SectorsPerCluster);
printf(" Bytes Per Sector: %d\n", BytesPerSector);
printf(" Number of Free Clusters: %d\n", NumberOfFreeClusters);
printf(" Total Number of Clusters: %d\n", TotalNumberOfClusters);
total = ((long int) TotalNumberOfClusters *
(long int) SectorsPerCluster *
(long int) BytesPerSector) / 512;
avail = ((long int) NumberOfFreeClusters *
(long int) SectorsPerCluster *
(long int) BytesPerSector) / 512;
used = total - avail;
printf(" Capacity (512 byte blocks): %ld\n", total);
printf(" Number of Free blocks: %ld\n", avail);
printf(" Number of Used blocks: %ld\n", used);
#if 0
printf("Sleeping for 11 seconds...\n");
sleep(11);
printf("Woke. Bye\n");
#endif
ret = 0;
}
free(sharename);
printf("Deactivating Stack\n");
smbcp_deactivate();
return (ret);
}
#define OfcGetDiskFreeSpace
Definition: file.h:2633
OFC_CORE_LIB const OFC_CHAR * ofc_get_error_string(OFC_DWORD dwerr)
OFC_CORE_LIB OFC_DWORD OfcGetLastError(OFC_VOID)
@ OFC_FALSE
Definition: types.h:632
OFC_UINT8 OFC_BOOL
Definition: types.h:624
OFC_UINT32 OFC_DWORD
Definition: types.h:430
OFC_WCHAR OFC_TCHAR
Definition: types.h:463