GNU/Linux >> Belajar Linux >  >> Linux

Untuk apa time_t pada akhirnya menjadi typedef?

Artikel artikel time_t Wikipedia menjelaskan hal ini. Intinya adalah jenis time_t tidak dijamin dalam spesifikasi C.

time_t tipe data adalah tipe data di pustaka ISO C yang ditentukan untuk menyimpan nilai waktu sistem. Nilai tersebut dikembalikan dari time() standar fungsi perpustakaan. Tipe ini adalah atypedef yang didefinisikan di header standar. ISO C mendefinisikan time_t sebagai jenis aritmatika, tetapi tidak menentukan jenis tertentu ,rentang, resolusi, atau enkode untuknya. Arti operasi aritmatika yang diterapkan pada nilai waktu juga tidak ditentukan.

Sistem yang sesuai dengan Unix dan POSIX mengimplementasikan time_t ketik sebagai signed integer (biasanya selebar 32 atau 64 bit) yang mewakili jumlah detik sejak awal zaman Unix :tengah malam UTC tanggal 1 Januari 1970 (tidak termasuk detik kabisat). Beberapa sistem dengan benar menangani nilai waktu negatif, sementara yang lainnya tidak. Sistem menggunakan time_t 32-bit tipe rentan terhadap masalah Tahun 2038.


[root]# cat time.c

#include <time.h>

int main(int argc, char** argv)
{
        time_t test;
        return 0;
}

[root]# gcc -E time.c | grep __time_t

typedef long int __time_t;

Ini didefinisikan dalam $INCDIR/bits/types.h melalui:

# 131 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 132 "/usr/include/bits/types.h" 2 3 4

Standar

William Brendel mengutip Wikipedia, tapi saya lebih suka dari mulut kuda.

Draf standar C99 N1256 7.23.1/3 "Komponen waktu" mengatakan:

Jenis yang dideklarasikan adalah size_t (dijelaskan dalam 7.17) clock_t dan time_t yang merupakan jenis aritmatika yang mampu merepresentasikan waktu

dan 6.2.5/18 "Tipe" mengatakan:

Tipe integer dan floating secara kolektif disebut tipe aritmatika.

POSIX 7 sys_types.h berkata:

[CX] time_t akan menjadi tipe integer.

di mana [CX] didefinisikan sebagai:

[CX] Ekstensi ke standar ISO C.

Ini adalah perpanjangan karena memberikan jaminan yang lebih kuat:floating point keluar.

gcc satu baris

Tidak perlu membuat file seperti yang disebutkan oleh Quassnoi:

echo | gcc -E -xc -include 'time.h' - | grep time_t

Di Ubuntu 15.10 GCC 5.2, dua baris teratas adalah:

typedef long int __time_t;
typedef __time_t time_t;

Perincian perintah dengan beberapa kutipan dari man gcc :

  • -E :"Berhenti setelah tahap prapemrosesan; jangan menjalankan kompiler sebagaimana mestinya."
  • -xc :Tentukan bahasa C, karena input berasal dari stdin yang tidak memiliki ekstensi file.
  • -include file :"Proses file seolah-olah "#include "file"" muncul sebagai baris pertama dari file sumber utama."
  • - :masukan dari stdin

Linux
  1. Apa yang Dilakukan "lc_all=c"?

  2. Apa?

  3. Tata Letak Keyboard Apa yang Memungkinkan Saya Mengetik ?

  1. Nilai maksimum untuk time_t (struct timespec)

  2. Apa yang harus saya gunakan selain windows.h di Linux?

  3. Apa id partisi / tipe sistem file untuk UDF?

  1. Apa itu pengguna Linux?

  2. Apa itu sysadmin?

  3. Apa perbedaan antara ls dan l?