我今天的考试中有这个问题,我似乎无法找到答案: 如何移动放在root中的所有找到的fit文件,并以我们保存所有属性的方式将它们移动到fit目录中?
答案 0 :(得分:2)
这个问题听起来有些模糊:第一个问题和直接答案是您使用cp(1)
命令和--preserve=all
。从联机帮助页:
- preserve [= ATTR_LIST]保留指定的属性(默认值:mode,ownership,timestamps),如果可能的话还有其他属性: context,links,xattr,all
看起来你正在参加一个操作系统课程,所以我认为考试没有测试你知道cp(1)
的所有可能选项的能力。问题是(可能)关于如何在代码中执行此操作(或者更确切地说,cp(1)
如何执行此操作)。
以编程方式,您可以这样做:
opendir(3)
打开源目录。readdir(3)
迭代地获取目录中的每个条目。每次调用readdir(3)
都会返回struct dirent
,其中包含该条目的inode,文件名和文件类型(如果文件,您可能希望递归重复该过程) type是一个目录)open(2)
文件为O_RDONLY
。同样open(2)
目标目录中的O_WRONLY | O_CREAT | O_TRUNC
文件名为read(2)
(只写模式,如果文件已经存在,则截断该文件,如果不存在则创建它)。write(2)
和fstat(2)
。fchmod(2)
以获取所有属性。st_mode
,将权限设置为与源文件的stat结构的fchown(2)
字段中的权限相同。st_uid
,将所有者和组设置为与源文件的统计结构的st_gid
和futimens(2)
字段相同。st_atime
,将访问和修改时间设置为与源文件的stat结构的st_mtime
和closedir(3)
字段相同。+-----------+----------+-------+-------------------+
| AGENCY_ID | LOCAL_ID | CLASS | LRS_ID |
+-----------+----------+-------+-------------------+
| 651 | 1 | NULL | 10200000690000001 |
| 651 | 2 | NULL | 10200000690205B01 |
| 651 | 3 | NULL | 10200000690293C01 |
| 651 | 4 | NULL | 10200000690293D01 |
+-----------+----------+-------+-------------------+
关闭目录。这些是您可以在副本中保留的所有属性。请注意,这两个文件之间仍然存在一些差异: