亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux系統(tǒng)下的文件與時(shí)間編程

        2013-03-28 03:05:45山東師范大學(xué)丁德文
        電子世界 2013年1期
        關(guān)鍵詞:描述符調(diào)用編程

        山東師范大學(xué) 丁德文

        1.文件編程

        Linux中文件編程可以使用兩種方法:Linux系統(tǒng)調(diào)用以及C語(yǔ)言庫(kù)函數(shù),這兩者的區(qū)別在于前者依賴于linux系統(tǒng),后者與操作系統(tǒng)是獨(dú)立的,在任何操作系統(tǒng)下,使用C語(yǔ)言庫(kù)函數(shù)操作文件的方法都是相同的。

        1.1 系統(tǒng)調(diào)用-創(chuàng)建文件

        int creat(const char *filename,mode_t mode)

        filename:要?jiǎng)?chuàng)建的文件名(包含路徑,缺省為當(dāng)前路徑)。

        mode:創(chuàng)建模式。

        常見的創(chuàng)建模式有:

        S_IRUSR 可讀

        S_IWUSR 可寫

        S_IXUSR 可執(zhí)行

        S_IRWXR 可讀.`寫`執(zhí)行

        除了可以使用上述宏以外,還可以直接使用數(shù)字來(lái)表示文件的訪問權(quán)限:

        無(wú)任何權(quán)限–>0

        可執(zhí)行–>1

        可寫–>2

        可讀–>4

        上述屬性的和,如可寫可讀–>6

        若一個(gè)文件的屬性是7,則表示此文件的屬性為可讀可寫可執(zhí)行。

        1.2 文件描述

        在linux系統(tǒng)中,所有打開的文件都對(duì)應(yīng)一個(gè)文件描述符。文件描述符的本質(zhì)是一個(gè)非負(fù)整數(shù)。當(dāng)打開一個(gè)文件時(shí),該整數(shù)由系統(tǒng)來(lái)分配。文件描述符的范圍是0-OPEN_MAX。早期的UNIX版本OPEN_MAX=19,即允許每個(gè)進(jìn)程同時(shí)打開20個(gè)文件,現(xiàn)在很多系統(tǒng)則將其增加至1024。

        系統(tǒng)調(diào)用-打開文件

        int open(const char *pathname,int flags)

        int open(const char *pathname,int flags,mode_t mode)

        pathname:要打開的文件名(包含路徑,缺省為當(dāng)前路徑)。

        flags:打開標(biāo)志。常見的打開標(biāo)志有:

        O_RDONLY只讀方式打開;O_WRLY只寫方式打開;O_RDWR寫方式打開;O_APPEND追加方式打開;O_CREAT創(chuàng)建一個(gè)文件;O_NOBLOCK非阻塞方式打開。

        1.3 系統(tǒng)調(diào)用-關(guān)閉文件

        當(dāng)完成操作文件以后,需要關(guān)閉文件:

        int close(int fd)

        fd:文件描述符。

        1.4 系統(tǒng)調(diào)用-讀文件

        int read(int fd,const void *buf,size_t length)

        功能:從文件描述符fd所指定的文件中讀取length個(gè)字節(jié)到buf所指向的緩沖區(qū)中,返回值為實(shí)際讀取的字節(jié)數(shù)。

        1.5 系統(tǒng)調(diào)用-定位文件

        whence可使用下述值:

        SEEK_SET:相對(duì)文件開頭。

        SEEK_CUR:相對(duì)文件讀寫指針的當(dāng)前位置。

        SEEK_END:相對(duì)文件末尾。

        Offset可取負(fù)值,表示向前移動(dòng)。例如下述調(diào)用可將文件指針相對(duì)當(dāng)前位置向前移動(dòng)5個(gè)字節(jié):Iseek(fd,-5,SEEK_CUR)int lseek(int fd,offset_t offset,int whence)

        功能:將文件讀寫指針相對(duì)whence移動(dòng)offset個(gè)字節(jié)。操作成功時(shí),返回文件指針相對(duì)于文件頭的位置。

        由于lseek函數(shù)的返回值為文件指針相對(duì)于文件頭的位置,因此下面調(diào)用的返回值就是文件的長(zhǎng)度:

        Lseek(fd,0,SEEK_END)

        當(dāng)判斷文件是否可以進(jìn)行某種操作(讀,寫等),這時(shí)可以使用access函數(shù):

        int access(const char *pathname,int mode)pathname::文件名稱mode:要判斷的訪問權(quán)限。可以取以下值或者是他們的組合。R_OK:文件可讀;W_OK:文件可寫;X_OK:文件可執(zhí)行;F_OK:文件存在。

        返回值:當(dāng)我們測(cè)試成功時(shí),函數(shù)返回0,否則如果一個(gè)條件不符時(shí),返回-1。

        2.庫(kù)函數(shù)

        C庫(kù)函數(shù)的文件操作是獨(dú)立于具體的操作系統(tǒng)平臺(tái)的,不管是在DOS、Windows、Linux還是在VxWorks中都是這些函數(shù)。

        庫(kù)函數(shù)——?jiǎng)?chuàng)建和打開:

        FILE *fopen(const char *filename,const char *mode)

        Filename:打開的文件名(包含路徑,缺省為當(dāng)前路徑)。

        Mode:打開模式。常見的打開模式有:r,rb只讀方式打開;w,wb只寫方式打開,如果文件不存在,則創(chuàng)建文件;a,ab追加方式打開,如果文件不存在,則創(chuàng)建文件;w,w+b,wh+讀寫方式打開,如果文件不存在,則創(chuàng)建文件;a+,a+b,ab+讀和追加方式打開,如果文件不存在,則創(chuàng)建該文件。b用于區(qū)分二進(jìn)制文件和文本文件,這一點(diǎn)在DOS。Windows系統(tǒng)中是有區(qū)分的,但Linux不區(qū)分二進(jìn)制文件和文本文件。

        size_t fread(void *ptr,size_t size,size_t n,FLIE *stream)

        功能:從stream指向的文件中讀取n個(gè)字段,每個(gè)字段為size字節(jié),并將讀取的數(shù)據(jù)放入ptr所指的字符數(shù)組中,返回實(shí)際已讀取的字節(jié)數(shù)。

        size_t fwrite(const void *ptr,size_t size,size_t n,FLIE *stream)

        功能:從緩沖區(qū)ptr所指的數(shù)組中把n個(gè)字段寫到stream指向的文件中,每個(gè)字段長(zhǎng)為size個(gè)字節(jié),返回實(shí)際寫入的字段數(shù)。

        int fseek(FILE *stream,long offset,int whence)

        whence:SEEK_SET從文件的開始出開始搜索;SEEK_CUR從當(dāng)前位置開始搜索;SEEK_END從文件的結(jié)束處開始搜索。

        在編寫程序的時(shí)候,有時(shí)會(huì)需要得到當(dāng)前路徑。C庫(kù)函數(shù)提供了getcwd來(lái)解決這個(gè)問題。

        char *getcwd(char *buffer,size_t size)

        提供一個(gè)size大小的buffer,getcwd,會(huì)把當(dāng)前的路徑名copy到buffer中,如果buffer太小,函數(shù)會(huì)返回-1。

        創(chuàng)建目錄

        #include

        int mkdir(char *dir,int mode)

        功能:創(chuàng)建一個(gè)新目錄。

        返回值:0表示成功,-1表示出錯(cuò)。

        3.時(shí)間編程

        在linux編程時(shí)我們經(jīng)常用到輸出系統(tǒng)當(dāng)前的時(shí)間,計(jì)算程序執(zhí)行的時(shí)間和延時(shí)執(zhí)行等,比如對(duì)算法進(jìn)行時(shí)間分析。

        時(shí)間類型:

        Coordinated Universal Time(UTC):世界標(biāo)準(zhǔn)時(shí)間,也就是格林威治標(biāo)準(zhǔn)時(shí)間(Greenwich Mean Time,GMT)。

        Calendar Time:日歷時(shí)間,是用“從一個(gè)標(biāo)準(zhǔn)時(shí)間點(diǎn)(如:1970年1月1日0點(diǎn))到此時(shí)經(jīng)過的秒數(shù)”來(lái)表示的時(shí)間。

        時(shí)間獲?。?/p>

        Time_t time(time_t *tloc)

        功能:獲取日歷時(shí)間,即從1970年1月1日0點(diǎn)到現(xiàn)在所經(jīng)歷的秒數(shù)。

        時(shí)間轉(zhuǎn)化struct tm *gmtime(const time_t *timep)

        功能:將日歷時(shí)間轉(zhuǎn)化為格林威治標(biāo)準(zhǔn)時(shí)間,并保持至TM結(jié)構(gòu)。

        struct tm *localtime(const time_t*timep)

        功能:將日歷時(shí)間轉(zhuǎn)化為本地時(shí)間,并保存至TM結(jié)構(gòu)。

        時(shí)間顯示

        char *asctime(const struct tm*tm)

        功能:將tm格式的時(shí)間轉(zhuǎn)化為字符串,如:Sat Jul 30 07:42:06 2012 char*ctime(const time_t *timep)

        功能:將日歷時(shí)間轉(zhuǎn)化為本地時(shí)間的字符串形式。

        時(shí)間獲?。?/p>

        int gettimeofday(struct timeval*tv,struct timezone *tz)

        功能:獲取從今日凌晨到現(xiàn)在的時(shí)間差,常用于計(jì)算事件耗時(shí)。

        延時(shí)執(zhí)行:

        unsigned int sleep(unsignen int seconds)

        功能:使程序睡眠seconds秒。

        void usleep(unsigned long usec)

        功能:使程序睡眠usec微妙。

        4.總結(jié)

        本文介紹了linux下文件編程與時(shí)間編程,主要介紹了文件的創(chuàng)建于打開,文件的讀寫操作,以及時(shí)間的獲取與轉(zhuǎn)化等。本文從概念上對(duì)linux下的文件編程以及時(shí)間編程做了系統(tǒng)的闡述,需要做的工作還需要進(jìn)一步改進(jìn)。

        [1]Mark GSobell.Apractical guide to Linux[M].Addison-Wesley Pub Co,1997.

        [2]Eberhardt Rechtin.Systems architecting:Creating and building complex systems[M].Prentice Hall,1991.

        [3]Andrew G Morgan.The Linux-PAM system administrators'guide[M].Linux Documentation Project,2002.

        [4]John Paul Wallington.The GNU bash reference manual M].Free Software Foundation,2002.

        猜你喜歡
        描述符調(diào)用編程
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        Linux單線程并發(fā)服務(wù)器探索
        利用CNN的無(wú)人機(jī)遙感影像特征描述符學(xué)習(xí)
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        成人精品视频一区二区三区尤物| 亚洲中文字幕综合网站| 日本一区三区三区在线观看| 又色又爽又高潮免费视频国产| 亚洲不卡中文字幕无码| 亚洲色四在线视频观看| 日本美女中文字幕第一区| 国产做无码视频在线观看| 国产色综合天天综合网| 无码国产精品色午夜| 国产精品一二三区亚洲| 放荡的少妇2欧美版| av人摸人人人澡人人超碰小说| 四虎无码精品a∨在线观看| 国产高清一区二区三区三州| 国产精品无码一区二区三区| 同性男男黄g片免费网站| 无码人妻少妇久久中文字幕| 色播视频在线观看麻豆| 久久久av波多野一区二区| 尤物99国产成人精品视频| 97国产精品麻豆性色| 亚洲av午夜一区二区三| 最近中文字幕视频完整版在线看| 一本大道久久精品 东京热| 国产91在线精品观看| 国产97色在线 | 国产| 丰满人妻熟妇乱又伦精品视| 亚洲欧美国产成人综合不卡| 二区三区日本高清视频| 亚洲av永久无码精品三区在线| 青草热久精品视频在线观看| av天堂手机一区在线| 伊人久久精品无码av一区| 国产乱子伦视频大全| 国产精品天干天干在线观蜜臀| 亚洲中文字幕乱码第一页| 性大毛片视频| 浪荡少妇一区二区三区| 亚洲av色在线播放一区| 最新国产精品久久精品|