I have just started developing and writing linux kernel modules and device drivers. I am having a lot of trouble understanding new data types that I haven't encountered while writing application programs. For instance, I am having difficulty understanding what is the purpose of size_t, ssize_t, loff_t etc? Why use these types instead of the usual data types? When were these new types introduced? Where can I understand all of these new data types?? Thanks in advance!!