Linux编程之系统调用


1Linux的系统调用

系统调用System Calls
系统调用:System Calls / Linux API
是一些在应用程序里调用的函数,这些函数间接地调 用了OS中的功能(调用了Linux内核的功能)
在地位上,与Windows API对等
在本质上,只调用了Linux Kernel
在形式上,如果一个函数不在任何库中提供,则它是 系统调用。
如,printf不是系统调用,它是libc库中的函数 mkdir是系统调用

例如,在命令行中,我们可以用命令
# mkdir testdir
来创建一个子目录testdir
那么,如果我们想在程序中来创建一个子目录, 该调用哪个函数呢?
man mkdir (1号manual: 命令行的用法)
man 2 mkdir (2号manual: 函数的用法)
(注:mkdir有多条manual,我们查看2号manual)

.
#include <stdio.h>
// linux
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main()
{
mkdir("testdir", 0666); // 这就是system call
return 0;
}

参考文档
当我们需在程序中调用OS的某个功能时,应 该想到用system call函数。
例如,
创建目录
查看文件属性
查看进程列表
获取目录下的所有文件

如何查看可用的系统调用?
man syscalls
根据函数名,再查看该函数的帮助
(官网上提供了一个html格式的文档,是linux1.0版本 系统调用,内容不全)
可以发现,以前学的open, close, read, write属于system call,它们不依赖别的库,直接由操作系统提供。
而pthread和dl不属于系统调用,它们分别在pthread和 dl库中提供。

小结:
1,系统调用的理解
2,系统调用的操作
3,系统调用的参考

2系统调用:读取目录

获取目录下的内容
本节课进一步示范system call的使用
需求:要求获取某个目录下的所有项(文件/ 子目录)的名称。

步骤

  1. 查找文档,寻找可用的system call
    opendir / readdir / closedir
  2. 查看帮助
    man opendir
  3. 测试代码
    测试函数的用法
  4. 整合代码(封装)
    将测试代码整合到目标项目中
3在代码中调用系统命令

system()
如果有些命令你找不到对应的system call,那么也可以在代码里直 接调用命令行。
system函数用法比较简单:
int ret = system(“rm ‐rf *.txt”);
其返回值就是所调用的命名行的返回值。

注:实际上system函数将创建一个子进程,并一直等待该进程结 束,该函数才返回。
这意味着,如果子进程要运行1分钟才返回,那这个函数就会阻塞 1分钟。如果子进程永不返回,则此函数永远阻塞。。。

popen()
popen():调用某个命令行,并获取其标准输出。p代表 pipe
FILE* fp = popen(“ifconfig”, “r”);
int n = fread(buf, 1, 512, fp);
pclose(fp);
注意:
(1)按linux programmer’s manual, 必须用pclose关闭而不 是fclose。
(2)要用"r",不能用"rb"“rt”,因为它本质上不是普通文 件

popen()
popen在linux是一个比较有用的函数,可以用 于获取系统的配置。
有些配置用命令行比较方便,但却找不到相 应的系统函数,所以只好用popen来读取其输 出。
优先找system call,找不到的时候再用popen

注:
system是标准C函数
popen/pclose不是标准C函数,是linux下的特 有的函数。 (windows下相应的叫_popen/_pclose)

小结:
1,system()
2,system()

学习资源 [《C语言/C++学习指南》Linux开发篇]( https://edu.csdn.net/course
/detail/1353)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值