最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言在linux下編程詳解

 更新時(shí)間:2021年08月25日 14:33:15   作者:CTirst  
這篇文章主要介紹了linux下基于C語言的編程,實(shí)例分析了基本使用技巧與相關(guān)概念,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

文件操作

#include <sys/unistd.h>		//含有close函數(shù)
#include <fcntl.h>			//含有open函數(shù)
int main(){
    int fd=open("text.txt",O_RDONLY); 
    close(fd);
}
//O_RDONLY是一個(gè)宏,代表這個(gè)文件只讀,常用的就是這三個(gè)
#define O_RDONLY	     00		//只讀
#define O_WRONLY	     01		//只寫
#define O_RDWR		     02		//讀寫都可以

上述的代碼打開了一個(gè)文件,隨即又關(guān)上了。那個(gè)int類型的變量fd叫做文件描述符(file descriptor)。用一個(gè)數(shù)字代表一個(gè)對(duì)象,這是C語言常見的設(shè)計(jì)模式,OpenGL的實(shí)現(xiàn)也是類似。

它的底層一般是這樣的:真正操作的對(duì)象是一個(gè)復(fù)雜的結(jié)構(gòu)體,這些對(duì)象存放在一個(gè)數(shù)組中,而數(shù)字代表真實(shí)對(duì)象在數(shù)組中的索引值。

在open和 close之間,當(dāng)然要進(jìn)行一些讀寫操作,示例如下:

#include <sys/unistd.h>
#include <fcntl.h>
int main(){		
    int fd=open("test.txt",O_WRONLY);
    write(fd,"hello world",11);		 //向文件中寫入了hello world
    close(fd);
}

看到這,你可能覺得不屑一顧,這和<stdio.h>不是差不多嘛。別急啊兄弟,這個(gè)fd可不僅僅代表通常意義的文件,Linux的其中一個(gè)設(shè)計(jì)哲學(xué)是:一切皆文件。讓我們列舉一下這個(gè)fd能代表什么:

1.文本文件和二進(jìn)制文件(這兩叫普通文件)
2.目錄文件(可以理解為文件夾)
3.字符設(shè)備和塊設(shè)備(例如網(wǎng)卡和硬盤)
4.套接字(實(shí)現(xiàn)網(wǎng)絡(luò)通信的接口,讀寫它相當(dāng)于網(wǎng)絡(luò)通信)
5.符號(hào)鏈接(類似于windows桌面上的快捷方式)
6.管道(用于進(jìn)程通信)

上面這個(gè)表你可能記不住,但是我相信你體會(huì)到了它的強(qiáng)大。下面是一個(gè)向控制臺(tái)打印字符串的例子。

#include <sys/unistd.h>
#include <fcntl.h>
int main(){
    write(STDOUT_FILENO,"hello world",11);
}
//上面的STDOUT_FILENO是一個(gè)宏,表示標(biāo)準(zhǔn)輸出,它們的定義是這樣的:
#define	STDIN_FILENO	0	/* Standard input.  */
#define	STDOUT_FILENO	1	/* Standard output.  */
#define	STDERR_FILENO	2	/* Standard error output.  */

因?yàn)?,1,2都已經(jīng)被占用了,所以我們的fd是從3開始的,如果出錯(cuò)(如文件不存在)則會(huì)返回一個(gè)負(fù)數(shù)。維護(hù)fd的數(shù)組在表示進(jìn)程的結(jié)構(gòu)體中,所以fd只在它所在的進(jìn)程有意義。不同的進(jìn)程可以有相同的fd

雖然統(tǒng)一的fd設(shè)計(jì)的非常好,但是它并不能讓我們看到文件的容量、修改日期等信息。所以還有其他函數(shù)供我們使用。

//需包含<sys/stat.h>頭文件,其詳細(xì)內(nèi)容如下所示
int stat (const char *file_name,struct stat *buf);
struct stat
{
    dev_t     st_dev;     /* ID of device containing file */文件使用的設(shè)備號(hào)
    ino_t     st_ino;     /* inode number */    索引節(jié)點(diǎn)號(hào) 
    mode_t    st_mode;    /* protection */  文件對(duì)應(yīng)的模式,文件,目錄等
    nlink_t   st_nlink;   /* number of hard links */    文件的硬連接數(shù)  
    uid_t     st_uid;     /* user ID of owner */    所有者用戶識(shí)別號(hào)
    gid_t     st_gid;     /* group ID of owner */   組識(shí)別號(hào)  
    dev_t     st_rdev;    /* device ID (if special file) */ 設(shè)備文件的設(shè)備號(hào)
    off_t     st_size;    /* total size, in bytes */ 以字節(jié)為單位的文件容量   
    blksize_t st_blksize; /* blocksize for file system I/O */ 包含該文件的磁盤塊的大小   
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */ 該文件所占的磁盤塊  
    time_t    st_atime;   /* time of last access */ 最后一次訪問該文件的時(shí)間   
    time_t    st_mtime;   /* time of last modification */ /最后一次修改該文件的時(shí)間   
    time_t    st_ctime;   /* time of last status change */ 最后一次改變?cè)撐募顟B(tài)的時(shí)間   
};

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

最新評(píng)論

周口市| 高陵县| 北碚区| 德保县| 岳池县| 望都县| 密山市| 宁武县| 正定县| 开平市| 鲁甸县| 德惠市| 府谷县| 堆龙德庆县| 安多县| 石嘴山市| 共和县| 威远县| 汕尾市| 罗江县| 应城市| 通河县| 永城市| 临江市| 金川县| 关岭| 抚州市| 开江县| 渝中区| 河曲县| 福鼎市| 镇平县| 来凤县| 遂平县| 洛浦县| 木里| 四子王旗| 进贤县| 五河县| 句容市| 车险|