中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言在linux下編程的示例分析

發布時間:2021-08-29 12:25:04 來源:億速云 閱讀:163 作者:小新 欄目:開發技術

這篇文章主要介紹C語言在linux下編程的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

文件操作

#include <sys/unistd.h>		//含有close函數
#include <fcntl.h>			//含有open函數
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		//讀寫都可以

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

它的底層一般是這樣的:真正操作的對象是一個復雜的結構體,這些對象存放在一個數組中,而數字代表真實對象在數組中的索引值。

在open和 close之間,當然要進行一些讀寫操作,示例如下:

#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的其中一個設計哲學是:一切皆文件。讓我們列舉一下這個fd能代表什么:

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

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

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

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

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

//需包含<sys/stat.h>頭文件,其詳細內容如下所示
int stat (const char *file_name,struct stat *buf);
struct stat
{
    dev_t     st_dev;     /* ID of device containing file */文件使用的設備號
    ino_t     st_ino;     /* inode number */    索引節點號 
    mode_t    st_mode;    /* protection */  文件對應的模式,文件,目錄等
    nlink_t   st_nlink;   /* number of hard links */    文件的硬連接數  
    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) */ 設備文件的設備號
    off_t     st_size;    /* total size, in bytes */ 以字節為單位的文件容量   
    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 */ 最后一次改變該文件狀態的時間   
};

以上是“C語言在linux下編程的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

无极县| 浦县| 海盐县| 襄垣县| 长阳| 洞头县| 郸城县| 上虞市| 塔河县| 柏乡县| 东源县| 苗栗市| 伊川县| 偃师市| 浦县| 平遥县| 台湾省| 分宜县| 龙泉市| 西充县| 辽宁省| 广昌县| 鱼台县| 怀柔区| 鸡泽县| 彰武县| 汉沽区| 抚宁县| 察哈| 元阳县| 清镇市| 天峨县| 民权县| 巴彦县| 紫阳县| 长武县| 南溪县| 怀柔区| 小金县| 大石桥市| 石渠县|