一 文件操作
stat() ;
fcntl();
truncate();
link();
symlink();
readlink();
unlink();
创建临时文件 先创建一个文件,然后unlink() ,当关闭该文件时,文件资源也被释放。系统使用rm命令时,其使用的函数时unlink(),当一个文件的硬链接减为0时,该文件的资源也被释放。
rename();文件重命名
chdir(),fchdir(); 改变文件目录
getcwd(); 获取当前目录,命令pwd调用该函数实现
pathconf:测试当前环境属性的最大值
#include
long fpathconf(int fd, int name);
long pathconf(const char *path, int name);
二 目录操作
每个目录占用空间大小为4096字节
mkdir();创建一个目录
rmdir();删除一个目录
opendir();打开一个目录
#include
#include
DIR *opendir(const char *name);
DIR *fdopendir(int fd);
readdir(); 每次返回一条记录项,DIR*指针指向下一条记录
telldir(); 返回目录指针当前在什么位置
seekdir();设置目录指针指向的位置
closedir(); 关闭打开目录
练习:递归读取某个目录的所有文件
三 进程ID
PCB
每个进程都有资源上限值,查看方式如下:
ulimit –a 查看进程限制 详细看 /proc/self/limits
物理地址 虚拟地址
进程只能读写用户空间 1page = 4096B
环境变量 env extern char **environ;
环境变量操作 setenv ();getenv(); unsetenv();
进程的运行状态:创建,就绪,运行,睡眠,停止
四 exec函数族:
extern char **environ;
int execl(const char *path, const char *arg, .../* (char *) NULL */);
int execlp(const char *file, const char *arg, .../* (char *) NULL */);
int execle(const char *path, const char *arg, .../*, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);
l 列表 v 向量二维数组,e 环境变量,p 环境变量目录。
五 wait()
作用:用于父进程获取子进程的退出状态。
pit_t wait(int * status); 函数返回退出子进程ID号,status表示退出时状态
pit_t waitpid(pid_t pid,int *status,int option);
<-1 回收指定进程组内的任意子进程
-1 回收任意子进程
0 回收和当前调用waitpid一个组的所有子进程
>0 回收指定ID的子进程
僵尸进程:子进程退出,父进程没有回收子进程资源(PCB),形成僵尸状态。
孤儿进程:父进程先于子进程退出,这是init进程将收养子进程。
无名管道:pipe()
在使用管道时,应注意如下这四种情况:
1 写关闭,读端读取数据,将返回0,相当于读到EOF。
2 写端未关闭,但没数据,读端去读取数据,将阻塞。
3 读端关闭,写端写数据,产生SIGPIPE信号,写进程时默认情况下会终止进程。
4 读端未读写端数据,写端再次写,将阻塞。
fpathconf(); 查询与文件相关最大限制的属性。
设置管道非阻塞。
有名管道:fifo
创建管道:mknode mkfifo
五 共享内存
法一(mmap 与文件相关联)
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
参数:addr 映射文件的起始地址 length映射文件的大小 prot读写权限 flags MAP_SHARED(共享) MAP_PRIVATE(私有) offset(偏移地址)
返回值:共享内存的起始地址
int munmap(void *addr, size_t length);
法二(shm 在内存中开辟一共享区域)
int shmget(key_t key, size_t size, int shmflg); //创建共享内存
void *shmat(int shmid, const void *shmaddr, int shmflg); //将内存连接到进程地址空间
void *shmat(int shmid, const void *shmaddr, int shmflg); //将内存从进程中分离
int shmctl(int shmid, int cmd, struct shmid_ds *buf); //共享内存的控制函数