Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,如何在linux中获得完整的时间戳(即使在秒之后)?_C_Linux_Operating System_Unix Timestamp_Timestamp With Timezone - Fatal编程技术网

在C语言中,如何在linux中获得完整的时间戳(即使在秒之后)?

在C语言中,如何在linux中获得完整的时间戳(即使在秒之后)?,c,linux,operating-system,unix-timestamp,timestamp-with-timezone,C,Linux,Operating System,Unix Timestamp,Timestamp With Timezone,我得到一个字节流,在每2000个字节之后,我想创建一个新文件并存储它。由于它是一个连续的字节流,我不能使用计数器等。 所以,我想使用系统时间戳来唯一地标识文件,比如filename 我找到了一些线程来获取系统时间戳,但我看到的只有几秒钟。是否有其他方法可以在C、linux操作系统中获得完整的时间戳(timestmap-like:2011-11-08 18:02:08.954092000)? 在所有线程中,我只能看到几秒钟,如2011-11-08 18:02:08使用date--rfc-3339=

我得到一个字节流,在每2000个字节之后,我想创建一个新文件并存储它。由于它是一个连续的字节流,我不能使用计数器等。 所以,我想使用系统时间戳来唯一地标识文件,比如
filename

我找到了一些线程来获取系统时间戳,但我看到的只有几秒钟。是否有其他方法可以在C、linux操作系统中获得完整的时间戳(
timestmap-like:2011-11-08 18:02:08.954092000
)? 在所有线程中,我只能看到几秒钟,如
2011-11-08 18:02:08

使用
date--rfc-3339='ns'
命令以纳秒精度查看o/p。您可以尝试查看
“man date”
命令以了解更详细的信息。如您所见,以下是使用此命令获得的o/p:

[user1@mach]# date --rfc-3339='ns'
2015-07-29 03:34:09.077024060-07:00
使用
date--rfc-3339='ns'
命令以纳秒精度查看o/p。您可以尝试查看
“man date”
命令以了解更详细的信息。如您所见,以下是使用此命令获得的o/p:

[user1@mach]# date --rfc-3339='ns'
2015-07-29 03:34:09.077024060-07:00
Linux具有纳秒级的分辨率

示例代码

#include <stdio.h>
#include <time.h>

int main(void) {
    unsigned mult = 0;
    struct timespec t0, t1;
    clock_gettime(CLOCK_REALTIME, &t0);
    for (unsigned k = 0; k < 10000000; k++) mult *= k; // no overflow!
    clock_gettime(CLOCK_REALTIME, &t1);

    printf("%lld.%09ld --> %lld.%09ld\n",
          (long long)t0.tv_sec, t0.tv_nsec,
          (long long)t1.tv_sec, t1.tv_nsec);
    return 0;
}
#包括
#包括
内部主(空){
无符号mult=0;
结构时间段t0,t1;
时钟获取时间(时钟实时,&t0);
对于(无符号k=0;k<10000000;k++)mult*=k;//无溢出!
时钟获取时间(时钟实时和t1);
printf(“%lld.%09ld-->%lld.%09ld\n”,
(长)t0.tv_秒,t0.tv_秒,
(长)t1.tv_sec,t1.tv_nsec);
返回0;
}
在我的机器上(FreeBSD/Unix,但应该与任何Linux相同),上面的代码都会打印出来

1438167485.022409606 --> 1438167485.055779608 1438167485.022409606-->1438167485.055779608Linux具有纳秒分辨率

示例代码

#include <stdio.h>
#include <time.h>

int main(void) {
    unsigned mult = 0;
    struct timespec t0, t1;
    clock_gettime(CLOCK_REALTIME, &t0);
    for (unsigned k = 0; k < 10000000; k++) mult *= k; // no overflow!
    clock_gettime(CLOCK_REALTIME, &t1);

    printf("%lld.%09ld --> %lld.%09ld\n",
          (long long)t0.tv_sec, t0.tv_nsec,
          (long long)t1.tv_sec, t1.tv_nsec);
    return 0;
}
#包括
#包括
内部主(空){
无符号mult=0;
结构时间段t0,t1;
时钟获取时间(时钟实时,&t0);
对于(无符号k=0;k<10000000;k++)mult*=k;//无溢出!
时钟获取时间(时钟实时和t1);
printf(“%lld.%09ld-->%lld.%09ld\n”,
(长)t0.tv_秒,t0.tv_秒,
(长)t1.tv_sec,t1.tv_nsec);
返回0;
}
在我的机器上(FreeBSD/Unix,但应该与任何Linux相同),上面的代码都会打印出来

1438167485.022409606 --> 1438167485.055779608
1438167485.022409606-->1438167485.055779608创建具有毫秒时间戳的文件名字符串的示例代码:

在ms.c中获取时间


创建具有毫秒时间戳的文件名字符串的示例代码:

在ms.c中获取时间


使用时间戳,无论精度如何,仍然可能发生冲突。使用
tmpnam()
。要“生成一个有效文件名且与现有文件名不同的字符串”,请同时
tmpfile_s()
注意,在Linux中,“inode”是4k,每个文件数据块是4k。因此,制作一堆2k字节的文件是对磁盘空间的极大浪费。建议:以4096字节的块保存到新文件使用时间戳,无论精度如何,仍可能发生冲突。使用
tmpnam()
。要“生成一个有效文件名且与现有文件名不同的字符串”,请同时
tmpfile_s()
注意,在Linux中,“inode”是4k,每个文件数据块是4k。因此,制作一堆2k字节的文件是对磁盘空间的极大浪费。建议:以4096字节的块保存到新文件,与sprintf(文件名“%lu”,时间)相关,
Linux是否将
time\t`指定为
unsigned long
。带有“时钟应为整数或实浮点型。[CX][选项开始]时间应为整数型。[选项结束]”。无论如何需要进行转换才能打印它
printf(“%lu”,无符号长时间)关于sprintf(文件名,“%lu”,时间)
Linux是否将
time\t`指定为
unsigned long
。带有“时钟应为整数或实浮点型。[CX][选项开始]时间应为整数型。[选项结束]”。无论如何需要进行转换才能打印它
printf(“%lu”,无符号长时间)