LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Bug in Linux time() function ? Or in Linux OS calls? (https://www.linuxquestions.org/questions/linux-newbie-8/bug-in-linux-time-function-or-in-linux-os-calls-794370/)

sinu_nayak2001 03-10-2010 12:44 AM

Bug in Linux time() function ? Or in Linux OS calls?
 
Dear All,

I wrote a small program, that creates files at an interval of 1 minute. But the time at which the file is created and last written and the last modification time of the file as shown by ls command differs by 1 second. The code and the output is presented below. please let me know where could be the bug?

root@new:/home/srinivas# cat b.c
#include <time.h>
#include <stdio.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
int main ()
{
int fd;
int i=0;
time_t initial_time = time(NULL);
time_t interval = 60;
time_t curr_time = time(NULL);

fd=open ("test1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
write(fd,"abcd1",5);
while(1)
{
curr_time = time(NULL);
if(curr_time >= initial_time)
{
if(i==0)
{
close(fd);
printf("\ntime before test2.txt fileopen= %d\n", time(NULL));
fd=open ("test2.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
write(fd,"abcd2",5);
printf("time after test2.txt filewrite= %d\n", time(NULL));
system("ls -l --time-style=+%s test2.txt");
initial_time += interval;
i=1;
}
else
{
close(fd);
printf("\ntime before test1.txt fileopen= %d\n", time(NULL));
fd=open ("test1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
write(fd,"abcd1",5);
printf("time after test1.txt filewrite= %d\n", time(NULL));
system("ls -l --time-style=+%s test1.txt");
initial_time += interval;
i=0;
}
}
usleep(1000);
}
return 0;
}
root@new:/home/srinivas# gcc b.c
root@new:/home/srinivas# ./a.out

time before test2.txt fileopen= 1268203133
time after test2.txt filewrite= 1268203133
-rw-r--r-- 1 root root 5 1268203133 test2.txt

time before test1.txt fileopen= 1268203193
time after test1.txt filewrite= 1268203193
-rw-r--r-- 1 root root 5 1268203192 test1.txt

time before test2.txt fileopen= 1268203253
time after test2.txt filewrite= 1268203253
-rw-r--r-- 1 root root 5 1268203252 test2.txt

time before test1.txt fileopen= 1268203313
time after test1.txt filewrite= 1268203313
-rw-r--r-- 1 root root 5 1268203312 test1.txt

time before test2.txt fileopen= 1268203373
time after test2.txt filewrite= 1268203373
-rw-r--r-- 1 root root 5 1268203372 test2.txt

root@new:/home/srinivas# ls -ltr --time-style=+%s
total 40
-rwxrwxrwx 1 root root 1095 1268202457 b.c
-rwxr-xr-x 1 root root 10300 1268202459 a.out
-rw-r--r-- 1 root root 5 1268203312 test1.txt
-rw-r--r-- 1 root root 5 1268203372 test2.txt
root@new:/home/srinivas#

Thanks and regards,
Srinivas

neonsignal 03-10-2010 02:43 AM

How repeatable is this? Does it happen every time?

Are you running the NTP update daemon (ntpd)?

What is the file system (eg ext3)? What options have been used to mount it (/etc/fstab)?

What happens if you move the 'close(fd)' after the 'printf' (instead of before it)?

(I couldn't repeat your results, which is why I am asking these questions).

sinu_nayak2001 03-10-2010 03:01 AM

@neonsignal

This is always repeatable.
ntpd is running.
file system is ext3.

from fstab:
/dev/sda6 /home ext3 relatime 0 2

Actually, my problem needs exactly this king of solution, so when I tried this, I got this problem and reported. I had tried another small program where file open and close happens immediately as you have proposed. Found no issue.

someone else also has reproduced this.
"I'm able to reproduce this on a locally mounted filesystem. It's very odd..." – R Samuel Klatchko

some more info on system:
Linux new 2.6.24-19-server #1 SMP Wed Jun 18 14:44:47 UTC 2008 x86_64 GNU/Linux

sinu_nayak2001 03-11-2010 12:02 AM

http://www.spinics.net/lists/kernel/msg1008110.html


All times are GMT -5. The time now is 10:21 AM.