文章目录
写在前面
由于Linux是开卷考试 所以这部分内容知识整理了书上没有的内容
第六章 文件IO
文件I/O函数-打开文件、读文件、写文件等等。大多数UNIX文件I/O只需用到5个函数:open、read、write、lseek 以及close。
● open函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char * pathname, int oflag,…
/*, mode_t mode * / ) ;
参数介绍:
①pathname是要打开或创建的文件的名字。
②oflag参数可用来说明此函数的多个选择项。用下列一个或多个常数进行或运算构成of lag参数(这些常数定义在< fcntl.h >头文件中):
●O_RDONLY 只读打开。
●O_WRONLY 只写打开。
●O_RDWR 读、写打开。
●在这三个常数中应当只指定一个。下列常数则是可选择的:
●O_APPEND 每次写时都加到文件的尾端。
●O_CREAT 若此文件不存在则创建它。
●返回值:
●打开成功返回对应文件的描述符;
●失败返回1。
● cerat函数
int creat(const char *pathname,mode_t mode);
以mode方式创建一个以pathname为文件名的文件,返回新的文件句柄fd,错误返回-1及错误代码errno。
● write函数
size_t write(int fd,void *buf, size_t count);
参数介绍:
write第一个参数fd为要写入文件的文件描述符;
第二个参数buf为写的内容的首地址;
第三个count为本次要写入数据的字节个数。
返回值:
调用成功后,返回实际写入数据字节数。
● read函数
size_t read(int fd,void *buf, size_t count);
参数介绍:
●①fd为要读取文件的文件描述符;
●②buf为读取内容存放缓冲区首地址;
●③count为缓冲区最多容纳多少字节数。
●返回值:
●调用成功后,返回实际写入数据字节数。
● sleek函数
off_t lseek(int fd, off_t offset, int whence);
●//成功返回新的文件偏移量,出错返回-1
●参数介绍:
● ①fd:要设置的文件对应文件描述符;
● ②offset:对应解释依靠于参数三;
● ③whence:
● 当whence为SEEK_SET时,则将该文件的偏移量设置为距文件开始处offset个字节;
● 当whence为SEEK_CUR时,则将该文件的偏移量设置为当前值加offset,offset可正可负;
● close函数
int close(int fd);
●关闭fd所指文件,顺利关闭返回0,错误返回-1。
示例:
编写一个文件I/O应用程序filetest,在当前目录下创建用户可读写文件"hello.txt",在其中写入" Hello, file I/O test ",关闭文件,再次打开它,读取其中的内容并打印出来。
第七章进程
● vfork()函数
功能与fork()函数功能类似不过更加彻底:内核不再给子进程创建虚拟空间,直接让子进程共享父进程的虚拟空间。当父子进程中有更改相应段的行为发生时,再为子进程相应的段创建虚拟空间并分配物理空间。在vfork()函数创建子进程后父进程会阻塞,保证子进程先行运行。
●vfork()函数创建的子进程会与父进程(在调用exec函数族函数或exit()函数前)共用地址空间,此时子进程如果使用变量则会直接修改父进程的变量值。因此,vfork()函数创建的子进程可能会对父进程产生干扰。另外,如果子进程未调用exec函数族函数或exit()函数,则父子进程会出现死锁现象。
●fork()函数与vfork()函数的主要区别如下:
● 1.vfork()函数保证子进程先行运行,在子进程调度exec函数族函数或者exit()函数后父进程才会被调度运行。如果子进程需要依赖父进程的进一步动作,则会产生死锁
●2.fork()函数需要拷贝父进程的进程环境,而vfork()函数则不需要完全拷贝父进程的进程环境,在子进程调用exec函数族函数或者exit()函数之前,子进程与父进程共享进程环境(此时子进程相当于线程),父进程阻塞
第八章 进程间通信
无名管道:
write函数的两种用法
●int write(int handle, void buf, int nbyte);
●像指定的缓冲区传数据,handle是文件描述符,buf指向内存的指针,nbyte为指定的字节数;返回值为-1则出错
●write(const char str,int n);
read函数
●int read(int handle, void *buf, int nbyte);
●read()会把参数handle所指的文件传送nbyte个字节到buf指针所指的内存中。若参数nbyte为0,则read()不会有作用并返回0。返回值为
有名管道:
消息队列