それはバグLinuxでの時間()関数またはパッケージはライブラリを含求?

StackOverflow https://stackoverflow.com/questions/2415018

  •  19-09-2019
  •  | 
  •  

質問

書いた小さなプログラムを生成するファイルの間隔で1分。その時にファイルが作成され、前作の最終修正時間のファイルとして示されるのをlsコマンドによって異なるので1秒。このコードの出力は以下の通りであります。教えてくださいができる蕎麦屋。

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#

コメントを入力してください

Srinivas

役に立ちましたか?

他のヒント

まず、問題があると思います様コードです。

  • を削除し open()write() 前のループは、何もやらないし。
  • 移動の close() 電話の直後に write() ます。

こうすることで確実にデータを書き込むと、ファイルを閉鎖する前に見て、修正時間の使用ls.その他にあり、1秒間のwrite()とclose().しておりますので、文書のみで5バイトを取得しまバッファ.だからその時だけ確認に時間後のwrite()を呼び出するという保証データが書き込まれていて、そのファイルは修正されているねじお。

第二に、できない1秒の遅延が time()ls 報告1秒の差です。以降、第二は最小の単位を期待するべきである丸めます。としておりますので二つの異なる方法での秒数から画期的なものが丸め規則は、簡単に結果を1秒差です。した場合は追加のファイルシステムのコンデンシンタンパクの変更、実際には三つの異なる主体の場合に影響を与えます。

また、見れば正しい結果と、その time() を示す秒以内に ls.で継続してご利用いただけ遅れて、だくさん!は四捨五入の差が最も可能性の高い理由です。

ではないバグLinuxでの時間()関数またはパッケージはライブラリを含ます。

  • 文書ファイルには時間がかかります
  • 呼び出し時間()関数は時間がかかり
  • の実行ロジックの時間()機能には時間がかかります

この結果は、1秒間の遅延..そなグ!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top