分类: C/C++
2013-08-23 20:13:10
linux下时间的表示
struct timeval 包括秒和微秒
struct tm 我们可通过tm结构来获得日期和时间 包括时区,年月日是时分秒
time_t 通常是long,保存秒数
第二个问题:
符号链接的死循环,cp和cat符号链接的区别
ln -s . ll
mkdir ff
mv ll ./ff/
循环出无限个ll
最后经过多次尝试,发现几个问题
ls -s . ./123/t
ls -s ~/桌面 ./123/f
ls -s . ./123/4/5/6/m
ls -s .. ./1/2/3/4/5/6/n
结果不同
f指向的是~/桌面
而t指向的./123
m指向的是6
n指向的是5
得到这样一个结论,使用.作为源地址,则指向的是父目录 .则是祖父目录
这样以来上面的问题就可以解决了
ll指向的是父目录,那么当ll移动到ff后指向的就是ff,ff目录下只有一个ll,所以只能看到ll的无限循环。
administrator@ubuntu:~/桌面$ ln -s .. 22/33/44/tes
假设上面是执行命令的情况.当建立符号链接的时候,用tes指向的数据块保存源文件(目录的inode信息),这里保存的是22/33,说明此时程序的工作目录在22/33/44中,那么就是在ln的时候,首先是切换目录到目的目录下,然后执行。符号链接指向的目录必须存在,不然第一步切目录就失败了。
在这个过程中了解到了mv和cp的一些问题。
mv在同一个分区中(也就是使用同一个inode表),那么是在对应目录下添加目录项,然后把心的目录项指向inode,unlink旧的文件
如果不是同一个分区,分别执行cp和rm两条指令。
假设一个进程输出文件到A,这时候执行mv A B。
在同一个分区中的时候,进程输出到B,因为mv执行unlink的时候连接数-1,即使此时为0,在进程退出之前,也不会删除inode,而这时候,B连接到了该inode,所以相当于写到了B。在进程开来,A就是B。没有分别。
如果是不同的分区,会把cp时候inode的内容复制,如果cp完了,进程仍在输出,这部分输出就不会出现在B中。
是如果由于意外断电或者其他原因的话,有可能会发生一些故障。如 可能一个inode结点在系统中已经被创建,但是其没有被正常使用,或者可能块号超出了范围。这些故障会给操作系统留下安全隐患。为此当出现意外关机或者 其他意外事件时,最好系统工程师能够利用fsck系统命令来修复inode结点中的错误。
在进行分区时,每个分区就是一个文件系统,而每个文件系统开始位置的那个块就称为超级块。超级块的作用是存储文件系统的大小、空的和填满的块,以及它们各 自的总数和其他诸如此类的信息。这也就是说,要使用这一个分区来进行数据访问时,第一个要经过的就是超级块,所以超级块坏了,这个磁盘也就回天乏术了。