tips: 答案仅供参考,不保证正确*

3.1

在我的 deepin 上,d_name 的长度是 256,有的系统定义成 1 是为了节省空间,使用时可以通过 malloc() 动态的分配空间,比如:

struct dirent

{

int len;

char a[0];

};

struct dirent *fun(char *str, int len)

{

struct dirent* n = (struct dirent*)malloc(len +1 + sizeof(struct dirent));

if (!n)

return NULL;

n->len = len;

memcpy(n->a, str, len);

return n;

}

扩展了 dirent 后,多出来的空间在 struct 的尾部,可以通过 char a[0] 直接访问。这里使用的 char a[0] 相比于 char a[1] 更值得推荐,不会增加结构的 size,如果不需要可以不占用内存,此外 C99 之前 a 的长度必须是 1。定义成 char * 也可以,不过指针占用 sizeof(char *) 个字节,而且指针在申请空间之后需要初始化。

3.2

经过实验,root 用户可以读

3.3

不会

3.4

为目录设置set-group-ID位目的是方便团队合作。举个例子,user_one 的主组为 group_one,附加组为 group_two,有一个目录 directory 的所属组是 group_two,user_one 在 directory 中创建了一个新文件 file_one,如果不为 directory 目录设置 set_group_ID 位,file_one 的所属组将为 group_one,为了把它的所属组改为 group_two,需要执行 chgrp 命令,这样无疑是繁琐的。在为 directory 设置了 set_group_ID 位后,user_one 新创建的文件的所属组将直接是 group_two。

3.5

实验后的结论:一个纯文本文件具有可执行权限也不可以执行,可执行文件没有可执行权限也不可以执行。file 命令可以显示文件的类型,如 text、executable、data。

3.6

让用户在使用的时候记住自己的用户 id 显然是不合理的,可以类比域名和 IP 地址的关系,相比于 IP 地址,域名明显更好记,用户名和用户 id 也一样。如果使用名户名来标识文件所有者,用户可一旦想要更改自己的用户名,那么就要把所有文件的信息都更新一遍,显然是不合理的,而且用户名可能会重复,这样也就起不到标识的作用,对于计算机而言,使用用户 id 节省空间,对于用户而言,使用用户名简单好记,缺一不可。

3.7

getdents用于批量的读取目录项,有三个参数,第一个参数是目录的文件描述符,第二个参数是一个 buffer,用于存放读取的数据,第三个参数是 buffer 的大小。阅读 getdents 的源代码发现其调用了 vfs_readdir 函数,该函数又调用了 readdir 函数。

3.8

通过命令

chmod u=rw ./test

更改权限后发现 test 文件夹下的所有文件和目录无法访问,Linux 下,目录也是一种文件,目录的可执行权限不是是否可以执行,而是是否能够进入目录。一个只读权限的目录不运行 CD进入目录,一个只有执行权限的目录可以进入但是不能看到目录下的内容。

3.9

要获取 login 的源代码,首先通过

which loign

获取 login 命令的位置,然后通过

dpkg -S /usr/bin/login

获取其源代码所在的包,最后通过

apt-get login

下载 login 的源代码,其中改变终端文件所有者的函数大概可能也许是 setup_tty。

linux编程课后作业,Unix/Linux 编程实践教程第三章习题相关推荐

  1. 《python编程快速上手 让繁琐工作自动化》第三章习题+实践答案

    习题 1.为什么在程序中加入函数会有好处? 答:函数减少了重复的代码.这让程序更短,更容易阅读,更容易修改 2.函数中的代码何时执行:在函数被定义时,还是在函数被调用时? 答:函数中的代码在函数被调用 ...

  2. UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2

    一 问题 对ls1的功能进行扩展,以达到类似ll命令的功能. 二 分析 在ls1中,我们利用readdir()函数和dirent结构体来获得目标文件夹内的文件名(dirent->d_name). ...

  3. 大学c语言第三章作业,c语言程序设计一章部分和第三章习题答案.doc

    c语言程序设计一章部分和第三章习题答案 实 验 报 告 课程名称 C语言程序设计A 实验项目 编程环境认知与顺序程序设计 实验仪器 PC机一台 学 院_____信息管理学院_______ 专 业 信息 ...

  4. 四轴飞行器实践教程第1章什么是飞行器

    四轴飞行器实践教程第1章什么是飞行器 四轴飞行器是飞行器的一个类别.我们现在先来了解一下飞行器的历史.分类和原理等常识性内容,再开始进入真正的四轴飞行器的制作. 1.1  飞行器的历史 人类自古到今, ...

  5. stty详解-Unix/Linux编程实践教程第五章 学习stty

    读书笔记-第五章 连接控制 学习stty 先放上思维导图 为设备编程&设备就像文件 前面所学的知识都是基于文件的,而在unix/linux系统中,所有的设备(打印机,终端,话筒,摄像头等等)也 ...

  6. CSAPP 第3章 机器级编程课后作业

    第3章 程序的机器级表示课后作业 3.58 一个函数的原型为: long decode2(long x, long y, long z); GCC 产生如下汇编代码: # long decode2(l ...

  7. 操作系统原理与Linux实践教程【第一章 操作系统概论】

    文章目录 1.1 操作系统的资源管理功能和目标 一.操作系统的定义 二.操作系统的组成 三.部分流行操作系统 四.操作系统在计算机系统中的位置 五.操作系统的资源管理技术 六.Linux操作系统实验环 ...

  8. linux查看地址和,UNIX/LINUX平台下查看MAC和WWN地址的方法

    归纳了一下,在UNIX/LINUX平台下查看MAC和WWN地址的方法 查看MAC地址 hp-ux #lanscan tru64 unix #netstat -ia aix #lsdev -Cc if ...

  9. C语言编程课后训练,C语言编程课后训练20道题.doc

    C语言编程课后训练20道题 C语言编程课后训练20道题/*-------------------------------------------------------[程序填空]---------- ...

最新文章

  1. 黑马在线教育项目---5、使用填充器创建数据库数据
  2. 成功解决AttributeError: module tensorflow.sets has no attribute intersection
  3. 往写好的html插入标签,写一个可插入自定义标签的 Textarea 组件
  4. 关于C#的Main(String[] args)参数输入问题
  5. sublime text的dockerfile语法高亮插件
  6. 安卓扫一扫自动跳转软件_ipad软件使用技巧
  7. 地图市场三足鼎立:诺基亚官方确认与亚马逊合作
  8. 用积分来衡量博客的成绩
  9. 谈谈Java与大数据之间的关系你们都了解了清楚了吗?
  10. word无所不能之在word中浏览网页看电影
  11. CDH hive的安装
  12. 四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比
  13. 查找图片中隐藏的flag
  14. 美团架构师谈论程序员进阶架构师所需能力模型
  15. Java基础12 implement和extends的区别
  16. 家用无线网络优化方案
  17. 求阶乘问题c语言编程,求阶乘问题
  18. c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...
  19. 新视野大学英语(第三版)视听说4必修答案(全)
  20. impinj R2000开发板维修记录——程序下载

热门文章

  1. osg第三方插件的编译方法(以jpeg插件来讲解)
  2. Android开发之Base64与bitmap互转的工具类
  3. Android开发之开发工具之Android Studio出现全屏的解决办法
  4. 双层json报文样例_json报文解析
  5. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
  6. 键盘enter按钮出发登陆事件
  7. .NET环境下每日集成(4):CruiseControl.Net配置注意事项
  8. .NET实现之(部署ActiveX控件—简)
  9. GitHub+Jenkins持续集成简介
  10. windows和linux双系统引导问题