實驗5:Linux文件操作_第1頁
實驗5:Linux文件操作_第2頁
實驗5:Linux文件操作_第3頁
實驗5:Linux文件操作_第4頁
實驗5:Linux文件操作_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗報告5課程名稱: Linux程序設計 實驗名稱: Linux文件操作 學生姓名: 班級: 學號: 指導老師: 成績: 一、實驗目的1.掌握系統(tǒng)函數(shù)system、chmod、stat的應用;2.掌握常用文件類型判斷的程序設計;3.掌握有關文件目錄操作函數(shù)scandir等的應用。二、實驗任務與要求1.應用函數(shù)system、chmod、stat獲取文件屬性的程序設計;2.使用文件屬性st_mode判斷文件類型的程序設計;3.文件目錄操作函數(shù)scandir等的程序設計。三、實驗工具與準備計算機PC機,Linux Ubuntu操作系統(tǒng)四、實驗步驟與操作指導1.調試下列程序。 操作步驟步驟1 編輯源程

2、序代碼。rootlocalhost root#vi 5-1.c程序代碼如下:/*5-1.c 獲取“/etc/passwd”文件的大小*/#include<unistd.h>#include<sys/stat.h> /*文件預處理,包含stat函數(shù)庫*/int main () /*C程序的主函數(shù),開始入口*/struct stat buf;system("vim /home/liu");chmod("/home/liu",S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); stat("/home/liu&q

3、uot;,&buf);printf("“/etc/passwd”文件的大小是:%dn",buf.st_size);return 0;步驟2 編譯程序。rootlocalhost root#gcc -o 5-1 5-1.c步驟3 執(zhí)行程序。rootlocalhost root#./5-1 問題思考:(1)修改程序,能夠顯示文件權限的所有者及最后一次文件修改的時間;(2)終端命令ls有使用格式:“l(fā)s -l”,請修改程序,程序的功能盡可能接近此命令文件。2程序設計題。設計一個程序,要求判斷“/etc/passwd”的文件類型。提示:使用st_mode屬性,可以使用幾個宏

4、來判斷:S_ISLNK(st_mode) 是否是一個連接,S_ISREG是否是一個常規(guī)文件,S_ISDIR是否是一個目錄,S_ISCHR是否是一個字符設備,S_ISBLK是否是一個塊設備,S_ISFIFO是否是一個FIFO文件,S_ISSOCK是否是一個SOCKET文件。最后一次文件修改的時間3調試下列程序。程序的功能是打印系統(tǒng)目錄“/etc/rc.d”下所有的文件和子目錄的名字。操作步驟步驟1 編輯源程序代碼。rootlocalhost root#vi 5-2.c程序代碼如下: /*5-2.c程序:讀取系統(tǒng)目錄文件“/etc/rc.d”中所有的目錄結構*/#include<stdio.

5、h>#include<sys/types.h>#include<dirent.h>#include<unistd.h>int main()DIR * dir;struct dirent * ptr;dir=opendir("/etc/rc.d");printf("/etc/rc.d目錄中文件或子目錄有:n");while(ptr = readdir(dir)!=NULL)printf("%sn",ptr->d_name);closedir(dir);問題思考:(1)修改程序,要求讀取“/

6、etc”目錄下所有的目錄結構,并依字母順序排列。#include<dirent.h>考慮以下語句:scandir("/etc",&namelist,0,alphasort);程序段:while(n-) printf("%sn", namelistn->d_name); free(namelistn);4. 調試并分析下列程序的結果。程序的功能是用遞歸的方法列出某一目錄下的全部文件的大小和文件夾及創(chuàng)建日期,包括子文件和子文件夾。操作步驟步驟1 編輯源程序代碼。rootlocalhost root#vi 5-3.c程序代碼如下: #

7、include<stdio.h>#include<time.h>#include<linux/types.h>#include<dirent.h>#include<sys/stat.h>#include<unistd.h>#include<string.h>char *wday="日","一","二","三","四","五","六"void list(char *name,

8、int suojin) DIR *dirname; struct dirent *content; struct stat sb; struct tm *ctime; int i; if(dirname=opendir(name)=NULL) printf("該目錄不存在n"); return; chdir(name);/*改換工作目錄*/ while(content=readdir(dirname)!=NULL) for(i=0;i<suojin;i+) putchar('t'); if(content->d_type=4) printf(&q

9、uot;目錄t"); else if(content->d_type=8) printf("文件t"); else printf("其他t"); stat(content->d_name,&sb); ctime=gmtime(&sb.st_mtime); printf("%d年%d月%d日 星期%s %d:%d:%dt",ctime->tm_year+1900, 1+ctime->tm_mon,ctime->tm_mday,wdayctime->tm_wday,ctime-

10、>tm_hour,ctime->tm_min,ctime->tm_sec);printf("%dt",sb.st_size);printf("%sn",content->d_name);/*列出目錄或文件的相關信息*/if(content->d_type=4&&strcmp(content->d_name,".")&&strcmp(content->d_name,".") list(content->d_name,suojin+1);/

11、*如果是目錄,則遞歸列出目錄里的內容*/ closedir(dirname); chdir(".");/*當該層目錄中的文件列完后,返回父目錄*/int main(int argc,char *argv)char name256; printf("類型t最后修改時間ttt大小t文件名n"); printf("*n"); if(argc=1) printf("Enter directory name:"); scanf("%s",name); list(name,0); else list(argv1,0); 五、實驗結果記錄 11(1)1(2)2、3、3(1)4、先用if語句判斷輸入的是否存在,再用while判斷是文件還是目錄,列出目錄或文件的相關信息。如果是目錄,則遞歸列出目錄里的內容,當該層目錄中的文件列完后,返回父目錄六、實驗結果分析1、st_uid是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論