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        结尾位置

0 0