系统编程(一)初识文件IO

“一切皆文件”是Unix设计的核心思想,那我们的系统编程的介绍就从这里开始,关于文件的IO操作氛围系统调用和C标准库,这里我主要说的是系统调用。
这里写图片描述
所有的执行I/O操作的系统调用都以文件描述符,一个非负整数来指代打开的文件,文件描述符用以表示所有类型的已打开文件,而且每个进程都维护着各自的打开文件列表,成为文件表(file table),该表由文件描述符作为索引,每一项都存储着文件打开的信息(文件的打开模式,存储位置等信息)。
一般情况下,每个进程至少会打开三个文件描述符:0,1和2,除非用户显示的关闭他们,否则他们就会默认的打开,文件描述符0代表标准输入流(stdin),1文件描述符代表标准输出流(stdout),2文件描述符代表错误输出流(stderr)

对于大部分语言而言,文件IO都分为三部分,打开文件,读写,关闭文件。作为第一节对于文件IO的初步认识,这里给出一段最简单的文件操作代码,并做简单分析

#include <stdio.h>
#include <fcntl.h>          //这是文件IO下同调用的关键头文件
#include <unistd.h>

int main(int argc, char *argv[])
{
    int fd;
    char content[]="Hello World";
    fd = open("demo1.txt", O_RDWR | O_CREAT);//以读写模式打开,若不存在则创建该文件
    if (fd == -1)      //进行检测
    {
        printf("open file failed\n");
        return -1;
    }

    if(write(fd, content, sizeof(content)) != sizeof(content)) //向文件中写入字符串
    {
      printf("somethin wrong\n");
      return -1;
    }
    close(fd);  //关闭文件句柄
    return 0;
}

最后说一下,如果在linux命令行里想看到系统调用的,例如open,可以使用

man 2 open   //查看系统调用open的用法

其中2数字代表系统调用,如果什么都不加,默认是1,即查看linux命令

1:普通的命令
2:系统调用,如open,write等,还有其对应的头文件
3:库函数,如printf,fread
4:特殊文件,也就是/dev下的各种设备文件
5:指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6:给游戏留的,由各个游戏自己定义
7:附件还有一些变量,比如向environ这种全局变量在这里就有说明
8:系统管理用的命令,这些命令只能由root使用,如ifconfig

猜你喜欢

转载自blog.csdn.net/bin_zhang1/article/details/81036228