怎样建立个人网站?网站建设需要多少钱
文章目录
- 一、系统调用
- 1.open()
- 1.1 所需基础知识
- 1.2. open() 详解
- 1.3 示例代码
- 二、标准IO
- 三、高级IO
一、系统调用
1.open()
1.1 所需基础知识
Linux遵循一切皆是文件的理念,因此,很多的交互工作都是通过读取和写入文件来完成。
文件必须被打开才能被访问。文件可以以只读方式或者只写方式打开,或者两者兼有。一个打开的文件通过唯一的文件描述符进行引用,该描述符是打开文件的元数据至其本身的映射。在Linux内核中,这个描述符,用一个整数表示 (int) ,简写为fd。文件描述符在用户空间中共享,允许用户程序用文件描述符直接访问文件。
1.2. open() 详解
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>//调用成功返回文件描述符,失败返回-1int open (const char* name, int flags);int open (const char* name, int flags, mode_t mode);
flags参数必须是一下之一:
参数 | 含义 |
---|---|
O_RDONLY | 只读 |
O_WRONLY | 只写 |
O_RDWR | 读写模式 |
flags参数可以和以下一个或多个值进行按位或运算,用以修改打开文件请求的行为。
参数 | 含义 |
---|---|
O_APPEND | 追加模式打开,文件位置指针将被置于文件末尾 |
O_ASYNC | 当指定文件可写或者可读时产生一个信号(默认SIGIO) |
O_CREAT | 当指定的name文件不存在时,将由内核来创建 |
O_DIRECT | 打开文件用于直接I/O |
O_DIRECTORY | 如果name不是目录,open()调用将会失败,这个标志用于opendir()内部使用 |
O_EXCL | 和O_CREAT一起给出的时候,如果name给定的文件已经存在,则open()调用失败,用来防止文件创建时出现竞争 |
O_LARGEFILE | 给定文件打开时使用64位偏移量,这样大于2G的文件也能被打开 |
O_NOFOLLOW | 如果name是一个符号链接,open()调用会失败 |
O_NONBLOCK | 如果可以,文件将在非堵塞模式下打开 |
O_SYNC | 打开文件用于同步IO |
O_TRUNC | 如果文件存在,且为普通文件,并允许写,将文件的长度截断为0 |
1.3 示例代码
以打开 /etc/services 文件为例
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>using namespace std;int main()
{int fd;fd = open("/etc/services",O_RDONLY);if(fd == -1){cerr << "open() failed";}else{cout << "open success" << endl;cout << "fd = " << fd << endl;}return 0;}
效果图: