Viewing: multifstat.c
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
int main(int argc, char **argv)
{
int fd1, fd2;
struct stat st1, st2;
if (argc != 3) {
printf("Usage %s file1 file2\n", argv[0]);
return 1;
}
fd1 = open(argv[1], O_CREAT | O_RDWR, 0666);
if (fd1 == -1) {
printf("Error opening %s: %s\n", argv[1], strerror(errno));
return errno;
}
fd2 = open(argv[2], O_RDONLY);
if (fd2 == -1) {
printf("Error opening %s: %s\n", argv[2], strerror(errno));
return errno;
}
sleep(1);
if (write(fd1, "hello", strlen("hello")) != strlen("hello")) {
printf("Error writing: %s\n", strerror(errno));
return errno;
}
if (fstat(fd1, &st1)) {
printf("Error statting %s: %s\n", argv[1], strerror(errno));
return errno;
}
if (fstat(fd2, &st2)) {
printf("Error statting %s: %s\n", argv[2], strerror(errno));
return errno;
}
if (st1.st_size != st2.st_size) {
printf("Sizes don't match %lu, %lu\n",
(unsigned long)st1.st_size,
(unsigned long)st2.st_size);
return 1;
}
if (st1.st_mtime != st2.st_mtime) {
printf("Mtimes don't match %ld, %ld\n",
st1.st_mtime, st2.st_mtime);
return 1;
}
if (st1.st_blocks != st2.st_blocks) {
printf("Blocks don't match %ld, %ld\n",
(long)st1.st_blocks, (long)st2.st_blocks);
return 1;
}
return 0;
}