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

C語言在linux下編程詳解

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

文件操作

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

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

它的底層一般是這樣的:真正操作的對象是一個復(fù)雜的結(jié)構(gòu)體,這些對象存放在一個數(shù)組中,而數(shù)字代表真實對象在數(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>不是差不多嘛。別急啊兄弟,這個fd可不僅僅代表通常意義的文件,Linux的其中一個設(shè)計哲學(xué)是:一切皆文件。讓我們列舉一下這個fd能代表什么:

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

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

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

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

雖然統(tǒng)一的fd設(shè)計的非常好,但是它并不能讓我們看到文件的容量、修改日期等信息。所以還有其他函數(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è)備號
    ino_t     st_ino;     /* inode number */    索引節(jié)點(diǎn)號 
    mode_t    st_mode;    /* protection */  文件對應(yīng)的模式,文件,目錄等
    nlink_t   st_nlink;   /* number of hard links */    文件的硬連接數(shù)  
    uid_t     st_uid;     /* user ID of owner */    所有者用戶識別號
    gid_t     st_gid;     /* group ID of owner */   組識別號  
    dev_t     st_rdev;    /* device ID (if special file) */ 設(shè)備文件的設(shè)備號
    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 */ 最后一次訪問該文件的時間   
    time_t    st_mtime;   /* time of last modification */ /最后一次修改該文件的時間   
    time_t    st_ctime;   /* time of last status change */ 最后一次改變該文件狀態(tài)的時間   
};

總結(jié)

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

相關(guān)文章

最新評論

南昌县| 宁陕县| 临海市| 三台县| 盐城市| 枝江市| 乐业县| 济南市| 微山县| 兴仁县| 金寨县| 武安市| 湄潭县| 诏安县| 孟连| 兰州市| 柏乡县| 崇州市| 郯城县| 宁津县| 平定县| 宾川县| 涟源市| 千阳县| 余姚市| 望城县| 墨竹工卡县| 新晃| 冕宁县| 新郑市| 西乌珠穆沁旗| 博白县| 勐海县| 本溪市| 丰顺县| 特克斯县| 时尚| 来安县| 遵义县| 勐海县| 巩留县|