Linux系统调用与文件I/O(一)
来源:互联网 发布:程序员编程动漫 编辑:程序博客网 时间:2024/05/22 00:35
Linux系统调用:
是指操作系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操
作系统内核提供的特殊服务,最直接的就是API调用,比如fork函数,exit函数等。
内核是一个很神秘很特别的程序,它不允许用户程序直接访问内核提供的服务,为了更好的保护内核空间,
将程序的运行空间分为内核空间和用户空间,他们运行在不同的级别上,在逻辑上是相互隔离的,
在linux中用户编程接口(API)遵循了在UNIX中最流行的应用编程界面标准---POSIX标准,这些系统调用编程
接口主要是通过C库来实现的(libc).
文件I/O:
大多数linux文件I/O只需用到5个函数:open、read、write、lseek及close。
不带缓存指的是每个read和write都调用内核中的一个系统调用,这些不带缓存的I/O函数不是ANSIC的组成
部分,但是POSIX组成部分.带缓存的函数一般都以f开头,如fread,fwrite等
linux的设备就是一个个文件,操作设备就是读写文件
文件描述符:
linux那么多文件,总得有个区分的标识,这就是文件描述符,对于内核而言,所有打开文件都由文件描述
符引用。文件描述符是一个非负整数。
在POSIX.1标准中,整数0、1、2被替换为符号常量:
0----STDIN_FILENO (标准输入)
1----STDOUT_FILENO (标准输出)
2----STDERR_FILENO (标准错误)
文件描述符的范围是0~OPEN_MAX,即一个进程能打开文件的范围
open函数:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname,int oflag,.../*,mode_t mode*/)
若成功则返回文件描述符,若出错则返回-1
对于open函数而言,仅当创建新文件时才使用第三个参数
oflag参数(这些常数定义在<fcntl.h>头文件中):
O_RDONLY--只读,O_WRONLY--只写,O_RDWR--读写........
<---------------------------------------------------------------------------------------------------
#include <sys/types.h>:
基本系统数据类型,是Unix/Linux系统的基本数据类型的头文件,含有size_t,time_t,pid_t等类型
---------------------------------------------------------------------------------------------------->
creat函数:若成功则返回只写打开的文件描述符,若出错则返回-1,
close函数:
#include <unistd.h>
int close(int filedes)
若成功则返回0,出错返回-1
Example: open.c
<---------------------------------------------------------------#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>int main(void){ int fd; if((fd = open("/tmp/hello.c", O_CREAT | O_TRUNC | O_WRONLY,0600 ))<0) { perror("open:"); exit(1); } else { printf("open file:hello.c %d\n",fd); } if( close(fd) < 0 ) { perror("close:"); exit(1); } else { printf("Close hello.c\n"); } exit(0);}------------------------------------------------------------->
lseek函数:
每个打开文件都有一个与其相关联的“当前文件偏移量”,它是一个非负整数,即通常所说的文件指针,通
常,读写操作都从当前文件偏移量处开始,并使偏移量增加所读或所写的字节数,按系统默认,当打开一个
文件时,除非指定O_APPEND选项,否则该位移量被设置为0
可以调用lseek显式地定位一个打开文件
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int filesdes,off_t offset,int whence);
返回:若成功则为新的文件位移,出错为-1.
对于offset与whence:
whence
SEEK_SET:距文件开始出offset个字节
SEEK_CUR:距当前位置offset个字节
SEEK_END:距文件末尾offset个字节
<-------------
off_t currpos;
currpos = lseek(fd,0,SEEK_CUR);
------------->:确定一个打开文件的当前位移量.
- Linux系统调用与文件I/O(一)
- Linux系统调用与文件I/O(一)(2)
- Linux系统调用与文件I/O
- linux系统调用与文件I/O操作
- linux系统调用与文件I/O操作
- linux系统调用与文件I/O操作
- Linux系统调用与文件I/O(二)
- Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
- Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
- Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O(尹成清华毕业生)
- Linux系统编程_2_文件I/O(系统调用&库函数)
- linux系统编程之文件与I/O(一):文件的打开关闭
- linux系统编程之文件与I/O(一):文件的打开关闭
- linux系统编程之文件与I/O(一):文件的打开关闭
- Linux系统调用之I/O操作
- Unix/Linux编程-系统调用I/O
- Linux系统文件I/O编程(三)---I/O多路复用
- Linux系统文件I/O编程(三)---I/O多路复用
- 直接在服务器与客户端之间传输对象
- HTML5高级程序设计 test1 (与dojo和原生js的对比)
- Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
- 在线pdf如何转换成jpg图片格式
- ionic+angularJs的App启动过程
- Linux系统调用与文件I/O(一)
- WebView获取点击的图片的URL
- git 添加忽略文件(.gitignore)
- Linux 进程学习(一)
- mysql和mongodb的书写区别
- Leetcode 82. Remove Duplicates from Sorted List II (Medium) (cpp)
- 数组 结构体的赋值
- c语言-逆置字符串
- Linux 进程学习(二)