linux应用调用内核函数,Linux 系统函数open、close、read、write、fcntl 简单应用

本文介绍了Linux系统调用的基本概念,包括其作为用户与内核交互的接口,以及系统调用与API、系统命令的区别。详细讲解了文件描述符的概念和作用,并探讨了open、close、read、write和fcntl等系统调用的使用方法,包括参数解释和返回值。最后,给出了一个示例程序,展示了如何通过系统调用实现配置文件的读写操作。
摘要由CSDN通过智能技术生成

系统调用

系统调用是操作系统提供给用户的一组“特殊接口”。系统调用并非直接和程序员或系统管理员直接打交道,而是通过软中断的方式向内核提交请求,从而获取内核函数的服务入口(系统调用表)。系统调用让系统从用户空间进入内核空间内运行,运行后将结果返回给应用程序(内核态->用户空间)。

0b51d5116619d4b41f5ed44f7033cdd6.png

系统调用和系统API等区别

系统API

主要是通过C库libc来实现,程序员多采用这种方式与内核交互,这些API通过系统调用来实现

系统命令

系统管理员采用系统命令与内核交互,是一个可执行文件,通过系统API及系统调用来实现

外壳程序

一系列系统命令和SHELL脚本共同组合成的程序。

函数库调用 与 系统调用

329e66b8e3c09121c6f26d57de5c5d2f.png

文件描述符

-每个进程PCB结构中有文件描述符指针,指向files_struct的文件描述符表,记录每个进程打开的文件列表

-系统内核不允许应用程序访问进程的文件描述符表,只返回这些结构的索引即文件描述符ID(File Description)给应用程序

-Linux系统中,应用程序通过这些文件描述符来实现让内核对文件的访问

-每个进程能够访问的文件描述符是有限制的,通过#ulimit –n可以查看

特殊文件描述符


标准输入STDIN_FILENO

标准输出STDOUT_FILENO

标准错误STDERR_FILENO


每个进程被加载后,默认打开0,1,2这三个文件描述符

open

-函数原型

int open(const char *path, int flags,mode_t mode);

-参数

path :文件的名称,可以包含(绝对和相对)路径

flags:文件打开模式

mode: 用来规定对该文件的所有者,文件的用户组及系统中其他用户的访问权限,则文件权限为:mode&(~umask)

-返回值

打开成功,返回文件描述符;

打开失败,返回-1

打开方式

d8a5ad85c22c29e9f947decb80e72f04.png

访问权限

0c551d51b48f30032ce3ef6f73c288cb.png

O_CREATE会产生特殊权限,需要设置访问权限:

S_IRWXU等价于 S_IRUSR|S_IWUSR|S_IXUSR (文件所有者)

S_IRWXG 等价于 S_IRGRP|S_IWGRP|S_IXGRP (文件用户组)

S_IRWXO 等价于 S_IROTH|S_IWOTH|S_IXOTH (文件其他用户)

close

关闭文件close(将进程中fd对应的文件描述表结构释放):

函数原型:int close(int fd); //如果出现错误,返回-1;调用成功返回0

read

-函数原型:

int read(int fd, void *buf, size_t nbytes);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值