Linux 应用开发之系统调用

系统调用(System Call)是操作系统提供给用户程序调用的一组”特殊”函数接口。Linux 系统分为内核空间和用户空间,用户空间只能通过系统调用接口与内核空间进行通信。 Linux 系统提供了两种方式供用户调用内核中的API来完成各功能,一种是Linux 自身提供的API接口,一种是C标准库接口,进行程序开发时推荐使用后者,后者不依赖于开发平台,可移植性更强。

Linux 提供的系统调用包含以下内容:

进程控制:如 fork、clone、exit 、setpriority 等创建、中止、设置进程优先级的操作。

文件系统控制:如 open、read、write 等对文件的打开、读取、写入操作。

系统控制:如 reboot、stime、init_module 等重启、调整系统时间、初始化模块的系统操作。

内存管理:如 mlock、mremap 等内存页上锁重、映射虚拟内存操作。

网络管理:如 sethostname、gethostname 设置或获取本主机名操作。

socket 控制:如 socket、bind、send 等进行 TCP、UDP 的网络通讯操作。

用户管理:如 setuid、getuid 等设置或获取用户 ID 的操作。

进程间通信:包含信号量、管道、共享内存等操作。

 

C标准库文件调用接口:

打开文件:

头文件: #include <stdio.h>

函数API:FILE *fopen(const char *pathname, const char *mode);

参数: pathname  指定文件名(绝对路径)

参数:mode  指定打开文件的方式,"r" 只读方式,"r+"读写方式,"w"写方式,会清空源文件内容,"w+"以写方式

打开文件,文件不存在时会创建,"a"以追加方式打开文件,"a+" 以读和追加的方式打开文件。

返回值: 失败返回NULL,成功返回文件指针。

 

读文件:

头文件:#include <stdio.h>

函数API: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数:ptr 缓存指针。

参数: size  读取数据块大小。

参数:nmemb 读取数据块数量。

参数:stream 读取的文件指针。

返回值 :返回读取的数据长度。

 

写文件:

头文件:#include <stdio.h>

函数API: size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数:ptr 数据缓存指针。

参数:size 写入数据块长度。

参数:  nmemb 写入数据块的数量。

参数:stream 文件流指针。

返回值: 返回写入的字节数。

 

关闭文件:

头文件:#include <unistd.h>

函数API: int close(int fd);

参数: fd 文件描述符

 

刷新缓冲区:(不用等到缓冲区满,立即写缓冲区的数据到硬盘)

头文件:#include <stdio.h>

函数API:int fflush(FILE *stream);

参数: stream 文件流指针

 

设置文件指针位置:

头文件:#include <stdio.h>

函数API: int fseek(FILE *stream, long offset, int whence);

参数:stream 文件流指针

参数: offset  文件指针偏移量

参数: whence 文件参考位置,SEEK_SET 代表offset是一个绝对位置, SEEK_END 代表offset以文件尾为参考点,SEEK_CUR 代表 offset 以当前位置为参考位置。

 

Linux 文件调用接口:

文件打开:

头文件: #include <sys/types.h>   #include <sys/stat.h>   #include <fcntl.h>

函数API :int open(const char *pathname, int flags);

函数API :int open(const char *pathname, int flags, mode_t mode);(flag == O_CREAT 时使用,指定文件用户权限)

参数: pathname  文件名

参数:   flags 文件打开方式  O_RDONLY 以只读方式打开, O_WRONLY 以只写方式打开, O_RDWR 以读写方式打开

O_CREAT 创建新文件 O_APPEND 以追加方式打开,O_TRUNC 文件存在,则清除文件内容。
返回值: 成功返回文件描述符,失败返回 -1.

 

文件读: 

头文件:#include <unistd.h>

函数API :ssize_t read(int fd, void *buf, size_t count);

参数 : fd 文件描述符

参数 : buf 文件缓冲区

参数: count 读取的字节数

返回值:成功返回读到的字节数,失败返回 -1 ,返回0 表示读到文件末尾。

 

文件写:

头文件: #include <unistd.h>

函数API : ssize_t write(int fd, const void *buf, size_t count);

参数 :fd  文件描述符

参数: buf  文件缓冲区

参数:   count  文件写入字节数

返回值:成功返回 写入的字节数,失败返回 -1。

 

文件关闭:

头文件: #include <unistd.h>

函数API :int close(int fd);

参数: fd  文件描述符

返回值 : 成功返回 0,失败返回-1 .

 

文件指针设置:

头文件: #include <unistd.h>  #include <sys/types.h>

函数API : off_t lseek(int fd, off_t offset, int whence);

参数: fd 文件描述符

参数: offset 文件指针偏移量

参数:   whence  修饰offset , SEEK_SET:offset 是一个绝对位,SEEK_END:offset 是以文件尾为参考点的相对位置,

SEEK_CUR:offset 是以当前位置为参考点的相对位置。

 

Linux 应用开发常用头文件

stdio.h:C 标准输入与输出头文件。

stdlib.h:C 标准库(standard library)头文件,该文件包含了常用的 malloc 函数、free 函数。

sys/stat.h:包含了关于文件权限定义,如 S_IRWXU、S_IWUSR,涉及系统调用文件相关的操作,

通常都需要用到 sys/stat.h 文件。

 unistd.h:UNIX C 标准库头文件,unix,linux 系列的操作系统相关的 C 库,包含 read、write 等系统调用的声明。

 fcntl.h:unix 标准中通用的头文件,其中包含的相关函数有 open,fcntl,close 等操作。

sys/types.h:包含了 Unix/Linux 系统的数据类型的头文件,常用的有 size_t,time_t,pid_t 等类型。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值