summaryrefslogtreecommitdiffstats
path: root/c_pgms/sparse/sparse_file_alt.c
diff options
context:
space:
mode:
Diffstat (limited to 'c_pgms/sparse/sparse_file_alt.c')
-rw-r--r--c_pgms/sparse/sparse_file_alt.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/c_pgms/sparse/sparse_file_alt.c b/c_pgms/sparse/sparse_file_alt.c
new file mode 100644
index 0000000..4afaa37
--- /dev/null
+++ b/c_pgms/sparse/sparse_file_alt.c
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#define BLOCK_SIZE 4096
+
+void *buf;
+
+int main(int argc, char **argv)
+{
+ buf = malloc (512);
+ memset (buf,"a",512);
+ int fd = 0;
+ int i;
+ int sector_per_block = BLOCK_SIZE/512;
+ int block_count = 4;
+
+ if(argc != 2) {
+ printf ("Wrong usage\n USAGE: program absolute_path_to_write\n");
+ _exit (-1);
+ }
+
+ fd = open (argv[1],O_RDWR | O_CREAT,0666);
+ if (fd <= 0) {
+ printf ("file open failed\n");
+ _exit (0);
+ }
+
+ while (block_count > 0) {
+ lseek (fd, BLOCK_SIZE, SEEK_CUR);
+ block_count--;
+
+ for(i = 0; i < sector_per_block; i++)
+ write (fd, buf, 512);
+
+ block_count--;
+ }
+
+ close(fd);
+
+ return 0;
+}