C语言在linux下编程解读

更新时间:2021年08月25日14:33:15作者:CTirst

这篇文章主要介绍了linux下基于C语言的编程,实例剖析了基本使用方法与相关概念,具有一定参考借鉴价值,须要的同学可以参考下

目录

文件操作

linux 与c_linux查看磁盘空间命令_linux查看ip命令

#include 		//含有close函数
#include 			//含有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称作文件描述符(filedescriptor)。用一个数字代表一个对象,这是C语言常见的设计模式,OpenGL的实现也是类似。

它的底层通常是这样的:真正操作的对象是一个复杂的结构体linux 与c,这种对象储存在一个链表中,而数字代表真实对象在链表中的索引值。

在open和close之间,其实要进行一些读写操作,示例如下:

linux 与c_linux查看ip命令_linux查看磁盘空间命令

#include 
#include 
int main(){		
    int fd=open("test.txt",O_WRONLY);
    write(fd,"hello world",11);		 //向文件中写入了hello world
    close(fd);
}

见到这,你可能认为揶揄一顾,这和不是差不多嘛。别急啊兄弟,这个fd可不仅仅代表一般意义的文件linux软件工程师培训,Linux的其中一个设计哲学是:一切皆文件。让我们列出一下这个fd能代表哪些:

1.文本文件和二补码文件(这两叫普通文件)

2.目录文件(可以理解为文件夹)

linux查看ip命令_linux查看磁盘空间命令_linux 与c

3.字符设备和块设备(比如网卡和硬碟)

4.套接字(实现网路通讯的插口,读写它相当于网路通讯)

5.符号链接(类似于windows桌面上的快捷方法)

6.管线(用于进程通讯)

前面这个表你可能记不住,而且我相信你感受到了它的强悍。下边是一个向控制台复印字符串的反例。

#include 
#include 
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,1linux关机命令,2都早已被占用了,所以我们的fd是从3开始的linux 与c,假如出错(如文件不存在)则会返回一个正数。维护fd的链表在表示进程的结构体中,所以fd只在它所在的进程有意义。不同的进程可以有相同的fd

尽管统一的fd设计的特别好,而且它并不能让我们看见文件的容量、修改日期等信息。所以还有其他函数供我们使用。

linux 与c_linux查看ip命令_linux查看磁盘空间命令

//需包含头文件,其详细内容如下所示
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 */ 最后一次改变该文件状态的时间   
};

总结

本篇文章就到这儿了,希望能给你带来帮助,也希望您能否多多关注脚本之家的更多内容!

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复