linux编程课后作业,Unix/Linux 编程实践教程第三章习题
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 编程实践教程第三章习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android定位会出现的问题,Andr
- 下一篇: 我的世界怎么装水(桶怎么装水装岩浆)