Linux C笔记(1)
来源:互联网 发布:linux运维面试会问什么 编辑:程序博客网 时间:2024/06/05 11:32
操作系统的定义:
操作系统(Operating System,简称OS)是管理和控制计算机 硬件 与 软件 资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源。
1.Linux C 编程(在Linux 下用C语言做开发)
(1)通过语言借助操作系统,访问硬件
(2)通过语言借助操作系统,访问系统接口
Linux下一切皆为文件
系统编程 通过:文件编程,进程与线程编程,网格编程
来实现:文件管理,进程管理,设备管理,网络协议栈
数据库
2.Linux操作系统的构成:
(1)用户空间 (2)内核空间
用户空间如何访问内核空间?
(1)系统调用:操作系统给用户的一组“特殊”接口,用户可以通过这些接口来获得操作系统内核
提供的服务(软件中断)
这些“特殊”接口成为API:用户编程接口
注意:系统调用不是程序员自己发起的,而是API接口发起的
系统命令相对API更高了一层,它实际上是一个可执行程序,内部引用了API来实现功能
(2)硬件中断
为什么用文件管理一切?
文件有利于数据的展示和存储
回顾:
文件的四大类:普通文件(-);目录文件(d);设备文件(c/b);链接文件(l);
其他:设备文件中,c为字符设备,b为块设备
管道文件(p),FIFO;堆栈文件(f),LIFO;共享文件(s);
3.文件描述符:
作用:用来标识文件,操作一个文件的文件描述符,相当于对文件进行操作
具体内容:非负的整数,是一个索引值,并指向内核中每个集成的记录表中
获取方式:系统动态给予,只有操作访问文件时,才给予标识(防止文件IP溢出)
六大基本文件操作API:
1. int creat(const char *pathname , mode_t mode);
所需头文件: - #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
功能:创建一个名叫pathname的文件,文件的属性为mode
返回值:出错返回-1,把错误对应的宏放在errno(显示errno 需要#include <errno.h>头文件)中
成功则返回文件的描述符
常用mode的几个宏:(1)S_IRWXU 00700
(2)S_IRUSR 00400
(3)S_IRWXG 00070 S_IRWXO00007
注意:(1)mode宏之间可以用 | 来实现多种属性,或者直接点0655等数字
(2)相同名文件创建,会覆盖,但属性不变,当创建的文件与已存在目录的名称一致时,会失败
(3)void perror(char *); 可以打印错误errno信息,能自动换行,在#include <stdio.h>中
(4)errno为全局变量,随时都有可能改变
(5)char *strerror(int errnum); 当给strerror传递errno时,可以打印宏对应的字符串,该函数在string.h中
2. int open(const char *pathname, int flags);
或者: int open(const char *pathname, int flags, mode_t mode);
所需头文件: #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
功能:打开一个名叫pathname的文件,文件的属性为mode
返回值:出错返回-1,把错误对应的宏放在errno(显示errno 需要#include <errno.h>头文件)中
成功则返回文件的描述符
常用flags的宏:(1)O_RDWR 读写方式 (2)O_RDONLY 只读 (3)O_WRONLY 只写
(4)O_CREAT 当没有该文件时,创建一个改文 (5)O_APPEND 追加打开
3. int close(int fd);
所需头文件:#include <unistd.h>
功能:关闭fd文件(fd为文件描述)
返回值:出错返回-1,成功返回0
4.ssize_t write(int fd, const void *buf, size_t count);
所需头文件:#include <unistd.h>
功能:将buf中的字符写入fd文件中,count为需要写入的字节长度(不能将整数直接写入,要转换)
返回值:出错返回-1,成功则返回实际写入的字节数,当没有写入时,为0
5.ssize_t read(int fd, void *buf, size_t count);
所需头文件:#include <unistd.h>
功能:fd文件中的内容读入buf中,count为需要读入的字节长度(读入的一般为字符串)
返回值:出错返回-1,成功则返回实际读入的字节数,当没有写入时,为0
注意:当读和写都用同一块缓冲区时,要用memeset对缓冲区清零
6.off_t lseek(int files, off_t offset, int whence);
所需头文件:#include <unistd.h>
#include <sys/types.h>
功能:修改files文件的读写指针
返回值:当前位置与开头之间的字节数
注意:(1)offset为正时,向右移动指针,为负时,向左移动指针
(2)off_t 为重命名之后的有符号整型
(3)whence常用宏:SEEK_SET 开头位置
SEEK_CUR 当前位置
SEEK_END 结尾位置
- Linux C笔记(1)
- Linux C笔记(2)
- Linux C笔记 (3)
- Linux C编程一站式学习笔记(1)
- linux c 一书学习笔记1
- 《Linux——C 笔记1》
- linux c 语言1-2 周笔记
- 《linux c编程一站式学习》笔记1
- linux C笔记1——常用命令
- Linux C socket编程笔记(1)
- Linux C 编程学习笔记1-GCC
- C/Linux C编码笔记
- linux C编程学习笔记(一)
- Linux C 笔记2.0
- Linux C 笔记1.0
- Linux C编程笔记
- linux c单元测试笔记
- linux C笔记
- 在慕课上学习的,HTML和CSS基础学习笔记1
- 生成对抗网络
- 算法题(1)
- 数据结构与算法分析笔记与总结(java实现)--链表15:链表回文判断问题
- spark parquet 从hdfs 上读 和写
- Linux C笔记(1)
- 记录csdn第一篇博客
- 在DOS下引用jar包
- 【JZOJ3852】单词接龙
- xml的4中解析方式与详解
- 使用IntelliJ IDEA 配置Maven(入门)
- 总结 C++中 基本内置类型 数据所占大小 和数据类型
- spark parquet 从hdfs 上读 和写 scala 版本
- 第4节-牛顿方法、指数分布族和广义线性模型