概述:
-
Linux c系统编程又叫嵌入式网络编程
主要涉及:文件,进程,进程间通信,多线程,网络,大并发网络服务器,数据库,shell编程等
-
Linux操作系统的组成:用户空间,内核空间。
原因:分成两个空间以保护内核不被用户轻易访问
-
用户空间如何访问内核空间?
系统调用,硬件中断,软件中断
-
系统调用:
用户通过调用操作系统提供的函数(API)来访问内核的数据或者获取服务;
-
如何学习嵌入式网络编程?
1、写(代码)
2、测试(写demo测试API接口的功能)
3、项目(知识点整合)
IO编程:
-
IO编程
即文件编程(Linux一切皆为文件,硬件设备也被抽象为文件。原因:文件的管理方式简单只有打开,关闭,读写,创建,删除)
-
文件描述符
文件描述符即是文件的id,特点是动态的。只有当你操作这个文件时,系统才会给这个文件配备一个id。
-
文件描述符的类型:unsigned int 。
- 特点二:即文件描述符是有范围的。
- 文件描述符:0:标准输入 1:标准输出 2:标准出错处理(cin,cout,cerr,clog)所以用户创建的文件,它的文件描述符是从3开始的
-
API:creat ,open ,read ,write ,close ,lseek .仅可以在Linux下使用,
而c库函数中的fopen ,fclose ,fread ,frwrite ,fseek .可以跨平台使用。 -
学习API:1、头文件 2、函数名 3、形参 4、返回值(类型)
基本API及其文件头:
//open&creat: 用于打开或创建一个文件或设备
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname,int flags,mode_t mode)
int creat(const char *pathname,mode_t mode);
//常用的形式: open("./",O_RDWR | O_CREAT | O_APPEND);
//可复选的flags还有: O_RDONLY,O_WRONLY,O_EXCL(文件已存在即报错),O_NOCTTY,O_TRUNC(清空文件原内容),O_NONBLOCK/O_NDELAY(管道fifo专用,屏蔽其他操作) ...
//返回值为文件描述符fd,失败fd=-1;
//read&write:read用于读取文件,write用于向文件描述符所表示的文件执行写入操作
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);//失败返回-1;
ssize_t write(int fd, const void *buf, size_t count);//失败返回-1;
//常用形式: write(fd,buff,strlen(buff));
//lseek:此函数会重新定位被打开文件的位移量,根据参数offset以及whence的组合来决定
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
//offset为正数则向前移|offset|位,为负数则向后移|offset|位
//whence: SEEK_SET(定位在开头),SEEK_END(结尾),SEEK_CUR(当前位置)
//常用形式: lseek(fd,0,SEEK_END);
基本要牢记的文件头集合:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <error.h>
#include <unistd.h>