文件系统总结2

文件属性:(fstat  stat   lstat)

用于查看文件属性,与statlstat不同,fstat需要先打开文件才可以进行文件属性的查看

 

以上三个函数的返回值:成功返回0,失败则返回-1,并且将errno设置为一个恰当的值

虽然lstatstat相似,但是lstat能返回符号链接,这是stat办不到的。

在使用函数的时候应先声明结构体和判断:

 

若要打印属性,应先了解一下struct stat

 

st_dev:描述文件所在设备的标识,通过major()和minor()得出,使用%d输出;

st_ino:文件的结点号,使用%d输出;

st_mode:可输出文件的类型与权限;

文件类型可通过参看man手册,使用switch语句进行输出:

 

文件权限通过与运算可得出八进制:

 

st_nlink:硬链接的个数(一个文件可有多个名字,且删除一部分文件名字是不能删除整个文件的,这就是硬链接)可通过ln命令建立硬链接,说到硬链接当然也会有软链接(一种类似于windows中的快捷方式一样的东西有文件名,有属性,且内容为另一个链接文件的文件名,指向那个文件,符号链接就是软连接);

st_uid:文件用户标识,使用%d输出;

st_gid:文件用户组标识,使用%d输出;

st_size:文件的大小,以字节单位,使用%d输出;

st_blksize:块大小,一般为4k

st_blocks:分配给文件的块的数量,512字节为单元;

st_atime:最后访问时间;

st_ctime:最后修改文件属性的时间;

st_mtime:最后修改文件内容的时间;

一下将通过程序一部分来说明:

 

输出为:

 

目录操作opendir closedir readdir

上述三个命令通过程序来解释:

 

程序实现了一个简单的ls功能,输出结果为:

 

 

库是什么,说白了,库就是 *.o 文件的集合。库分为静态库和动态库。

静态库:

优点:程序在运行的与函数库没有关系,一直非常方便;

缺点:①浪费磁盘的空间;②浪费了内存。

打包一个静态库:

ar crs libxxxx.a *.o

例如:在已有hello.o文件的前提下(若没有,需使用gcc -c生成.o文件),输入以下语句:

ar crs libmyhello.a hello      

链接一个库: gcc -o main main.c libmyhello.a

运行./main便可看到结果是合理的

动态库:

又称共享库,顾名思义及时将库共享,共享的方式是使用索引,并不会真正地链接。就像这样:

 

创建动态库:

①建立与位置无关的代码: gcc -fPIC -Wall -c hello.c  fPICposition independent code

②建立共享:gcc -shared -o libmyhello.so hello.o

③解决路径问题:方法一:将库拷贝到/usr/lib目录下(强迫症玩家不建议这么操作),拷贝前请注意自己是root用户。cp libmylib.so /usr/lib

方法二:在环境变量中加入库的路径:export  LD_LIBRARY_PATH=.

方法三:添加/etc/ld.so.conf.d*.conf文件

这样之后在进行连接就不会有问题了:gcc -o main main.c libmehello.so

   也可以写作:gcc -o main main.c -lmyhello -l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值