C语言在linux下编程的示例分析

  介绍

这篇文章主要介绍C语言在linux下编程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

文件操作

# include  & lt; sys/unistd.h>//含有密切的函数   # include  & lt; fcntl.h>//含有开函数   int  main () {   ,,,int  fd=开放(“text.txt" O_RDONLY),,   ,,,关闭(fd);   }//O_RDONLY是一个宏,代表这个文件只读,常用的就是这三个   # define  o_rdonly,,,,, 00//只读   # define  o_wronly,,,,, 01//只写   # define  o_rdwr,,,,, 02年//读写都可以

上述的代码打开了一个文件,随即又关上了。那个int类型的变量fd叫做文件描述符(文件描述符)。用一个数字代表一个对象,这是C语言常见的设计模式,OpenGL的实现也是类似。

它的底层一般是这样的:真正操作的对象是一个复杂的结构体,这些对象存放在一个数组中,而数字代表真实对象在数组中的索引值。

在打开和关闭之间,当然要进行一些读写操作,示例如下:

# include  & lt; sys/unistd.h>   # include  & lt; fcntl.h>   int  main () {   ,,,int  fd=开放(“test.txt" O_WRONLY);   ,,,写(fd,“hello  world" 11);,//向文件中写入了hello 世界   ,,,关闭(fd);   }

看到这,你可能觉得不屑一顾,这和& lt; stdio.h>不是差不多嘛。别急啊兄弟,这个fd可不仅仅代表通常意义的文件,Linux的其中一个设计哲学是:一切皆文件。让我们列举一下这个fd能代表什么:

1。文本文件和二进制文件(这两叫普通文件)
2。目录文件(可以理解为文件夹)
3。字符设备和块设备(例如网卡和硬盘)
4。套接字(实现网络通信的接口,读写它相当于网络通信)
5。符号链接(类似于windows桌面上的快捷方式)
6。管道(用于进程通信)

上面这个表你可能记不住,但是我相信你体会到了它的强大。下面是一个向控制台打印字符串的例子。

# include  & lt; sys/unistd.h>   # include  & lt; fcntl.h>   int  main () {   ,,,写(STDOUT_FILENO,“hello  world" 11);   }//上面的STDOUT_FILENO是一个宏,表示标准输出,它们的定义是这样的:   #定义stdin_fileno 0/*, Standard 输入只*/#定义stdout_fileno 1/*, Standard 输出只*/#定义stderr_fileno 2/*, Standard  error 输出只,*/

因为0,1,2都已经被占用了,所以我们的fd是从3开始的,如果出错(如文件不存在)则会返回一个负数。维护fd的数组在表示进程的结构体中,所以fd只在它所在的进程有意义。不同的进程可以有相同的fd

虽然统一的fd设计的非常好,但是它并不能让我们看到文件的容量,修改日期等信息,所以还有其他函数供我们使用。

//需包含& lt; sys/stat.h>头文件,其详细内容如下所示   int  stat  (const  char  * file_name struct  stat  * buf);   struct 统计   {   ,,,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 文件),*/,设备文件的设备号   ,,,off_t ,,,, st_size;,,,,/*, total 大小,拷贝bytes  */,以字节为单位的文件容量,,,   ,,,blksize_t  st_blksize;,/*, blocksize  for  file  system  I/O  */,包含该文件的磁盘块的大小,,,   ,,,blkcnt_t , st_blocks;,,/*, number  of  512 b  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下编程的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

C语言在linux下编程的示例分析