系统调用的一些函数
来源:互联网 发布:我的邻居是exo网络剧 编辑:程序博客网 时间:2024/04/28 03:27
1、open() ----打开函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);
pathname:要打开或创建的文件名称。
flags:标志位,指定打开文件的操作方式。
mode:指定新文件的访问权限。(仅当创建新文件时才使用该参数)
返回值:若成功返回文件描述符,否则返回-1并设置变量errno的值。
flags的取值
基本取值:
O_RDOWRONLY:以只写方式打开文件。
O_RDWRNLY:以只读方式打开文件。
O_RDWR:以读写方式打开文件。
注意:上述三个常量必须指定且只能指定一个。
可选取值(部分):
O_CREAT:如果被打开的文件不存在,则自动创建这个文件。
O_EXCL:如果O_CREAT标志已经使用,那么当由pathname参数指定的文件已经存在时,open返回失败。
O_TRUNC:如果被打开的文件存在并且是以可写的方式打开的,则清空文件原有的内容。
O_APPEND:新写入的内容将被附加在文件原来的内容之后,即打开后文件的读写位置被置于文件尾。
2、read() -----读函数
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
Returns number of bytes read, 0 on EOF, or –1 on error
各参数及返回值的含义如下:
fd:要读取的文件的描述符。
buf:读取到的数据要放入的缓冲区。
count:要读取的字节数。
返回值:若成功返回读到的字节数,若已到文件结尾则返回0,若出错则返回-1并设置变量errno的值。
注意:
1. 这里的size_t是无符号整型,ssize_t是有符号整型。
2. buf指向的内存空间必须事先分配好。
使用read()时,可能遇到哪些情况?
返回值等于count
返回一个大于0小于count的值
返回0
阻塞
返回-1且errno的值为EINTR
返回-1且errno的值为EAGAIN
文件以阻塞方式进行操作
ssize_t ret;
while (len != 0 && (ret = read (fd, buf, len)) != 0) {
if (-1 == ret) {
if (EINTR == errno)
continue;
perror("read");
break;
}
len -= ret;
buf += ret;
}
其中:len初始值为要读取的字节数
文件以非阻塞方式进行操作
ssize_t nr;
start:
nr = read (fd, buf, len);
if (-1 == nr) {
if (EINTR == errno)
goto start;
if (EAGAIN == errno)
/* 处理其他事务,在恰当的时候再调用read */
else
/* 有错误发生,处理错误 */
}
errno如果是EINTR,可以再次进行读操作;如果是EAGAIN,表示要读取的文件现在没有可供读取的数据。
3、write() ---写入函数
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
Returns number of bytes written, or –1 on error
各参数及返回值的含义如下:
fd:要写入的文件的描述符。
buf:要写入的数据所存放的缓冲区。
count:要写入的字节数。
返回值:若成功返回已写的字节数,出错则返回-1并设置变量errno的值。
使用write()时,可能遇到哪些情况?
返回值等于count
返回一个大于0小于count的值
阻塞
返回-1且errno的值为EINTR
返回-1且errno的值为EAGAIN
返回-1且errno的值为EBADF
返回-1且errno的值为EFAULT
返回-1且errno的值为EPIPE
4、lseek()改变文件偏移量
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
Returns new file offset if successful, or –1 on error
其中,参数whence必需是以下三个常量之一:
SEEK_SET:将文件偏移量设置在距文件开始处offset个字节。
SEEK_CUR:将文件偏移量设置在其当前值加offset,offset可正可负。
SEEK_END:将文件偏移量设置为文件长度加offset,offset可正可负。
- 系统调用的一些函数
- 一些库函数、系统函数的调用
- 调用系统的函数
- 一些函数调用的说明
- 函数调用的一些约定
- 虚函数的系统调用
- 系统调用与函数调用的区别
- 系统调用与函数调用的区别
- 函数调用与系统调用的区别
- linux一些系统调用的再实现
- 调用系统相机的一些坑
- 系统调用、函数调用
- 系统调用&函数调用
- 函数调用规范的一些知识
- 关于函数调用的一些心得
- X64 函数调用的一些问题
- 函数调用的一些易错
- 小程序的一些函数调用方法
- oracleday09
- MyBatis基础
- 从零开始搭建环境编写操作系统 AT&T GCC (八)使用键盘和滚轮鼠标
- 堆排序
- Error running Tomcat8: Address localhost:1099 is already in use 的错误
- 系统调用的一些函数
- 设计模式---原型模式(Prototype)
- 希尔排序
- LeetCode 513 Find Bottom Left Tree Value (BFS)
- 关于LYNC同步通讯录参数修改
- 机器学习-集成学习方法
- 红帽 重置 MAC地址
- wine下的字体乱码问题
- codemirror 常见操作