Linux中的系统IO函数
Posted xuejiale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中的系统IO函数相关的知识,希望对你有一定的参考价值。
一、整体大纲
二、常用文件IO函数介绍
对于Centos7查看系统函数需要安装man手册
[[email protected] linuxC]# yum -y install man-pages
1. 常用IO热身:
(1)首先来看下面一个示例:
1 #include<stdio.h> 2 #include<fcntl.h> 3 #include<sys/types.h> 4 #include<unistd.h> 5 6 int main() 7 { 8 close(1); 9 int fd = open("msg.log", O_CREAT|O_TRUNC|O_WRONLY, 0644); 10 printf("hello world\\n"); 11 //fflush(stdout); 12 close(fd); 13 14 return 0; 15 }
执行结果如下:
[[email protected] linuxC]# gcc print_where.c -o print_where [[email protected] linuxC]# ./print_where [[email protected] linuxC]# cat msg.log
注意:没有打印出预期的"hello world",也没有在文件msg.log中写入"hello world"。
(2)去掉代码中的注释掉的 fflush 再试下:
[[email protected] linuxC]# gcc print_where.c -o print_where [[email protected] linuxC]# ./print_where [[email protected] linuxC]# cat msg.log hello world
注意:没有打印出 "hello world"但是将结果写入到了文件msg.log中。
(3)结果分析:
系统默认会打开三个文件描述符(stdin,stdout,stderr),在程序中close(1)关掉了标准输出,此时open打开返回的是最小可用的文件描述符,也就是 fd = 1,因此printf本应该打印到文件中,但是close(fd)不会触发buffer刷新,因此既不会输出到屏幕也没有输出到msg.log中。当打开fflush,则会刷新buffer,因此就可以看到msg.log文件中"hello world"。
以上是关于Linux中的系统IO函数的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段