培训部分
mmap()
sys/mman.h
参数很麻烦,实时映射用
文件夹操作
dirent.h
DIR* dir=opendir(path);
错误返回null
struct dirent* ent;
接受文件夹内部文件信息
readdir(dir)生成一个dirent结构体,然后返回指针给ent
dirent->char d_name[256]文件名,包含"."文件和".."文件
->unsigned char d_type 文件类型 4代表文件夹 可以用DT_BLK,DT_CHR系列宏函数测试
-> ino_t d_ino 文件的i节点
-> off_t d_off 下一个文件的偏移量
-> unsigned short d_reclen不知道干吗的
文件
struct stat s=[];
stat("xx.xx",&s);
错误返回-1
获取stat数组
s.st_ino 文件i结点
s.st_size 文件大小
s.st_nlonk 硬链接数量
s.st_mtime 时间,秒
s.st_mode 权限
可以使用 s.st_mode & 07777修改 取后四位
S_ISREG,S_ISDIR(s.st_mode)可以判断类型
access 有权限返回0
chmod("xx.xx",0644);
truncate("xx.xx",100) 修改文件大小,单位字节
short l_type;//锁类型
short l_whence;//锁的起点
off_t l_start;//锁的起点的偏移量
off_t l_lenth;//锁长度
pit_t l_pid;//锁定进程id,只有F_GETLK使用,F_SETLK给-1
}
F_RWLCK 读锁
F_WRLCK 写锁
F_UNLCK 无锁
fcntl("xx.xx",F_SETLK,&flock);
失败返回-1
F_SETLKW等待
进程运行状态
S 休眠
R 正在运行
O 准备
Z 僵尸进程
子进程结束没有被wait或者waitpid都会成Z
_exit()和_Exit()一回事
exit()会先调用atexit()注册的函数
_Exit()立刻结束
exit(int status)
wait(),waitpid()可以获取status
pid_t wait(int* status);
pit_t waitpid(pid_t pid,int* status,int options)
waitpid第一个参数
-1等待子进程中任何一个
>0特定子进程
0 同组子进程任何一个
<-1特定同组子进程
第三个参数
0阻塞,WNOHANG 不阻塞
ececl("/bin/ls","ls","-l",NULL);
第一个参数 执行的文件
第二个参数 在任务管理器中的标示名
第三个参数 传入的参数
三个参数都必须是字符串
信号
kill -9 pid
发送信号给pid
ctrl+c SIGINT 2
ctrl+\ SIGQUIT 3
SIGKILL 9
SIGKILL和SIGSTOP 两个信号系统强制默认执行
linux中1-31 不可靠信号 ,不支持排队,多个积累之后只会执行一次
34-64 可靠信号,多个积累之后会排队执行多次
signal(SIGINT,fa),sigaction()
fa为一个参数为int返回为void的函数名或函数指针
SIG_DFL默认处理
SIG_IGN忽略处理
出错返回SIG_ERR;
kill(pid_t pid,int signo)
<0 指定pid
-1 发送所有进程,得有权限
0 发送本组所有进程
<-1 指定进程组id,发送进程组所有进程
alarm一个唯一的定时器,发送SIGALRM信号
信号集
sigset_t
初始化
sigemptyset(sigset_t* set); 清0
sigfillset()全1
sigismember(set,int)查看信号是否在其中
信号屏蔽
sigprocmask(int how,sigset_t* new,sigset_t *old)
new会代替old实现屏蔽
how的三个
SIG_BLOCK:new+old
SIG_UNBLOCK:old减去new中有的
SIG_SETMASK:new覆盖old
在解除屏蔽后会处理
sleep()返回剩余秒数
usleep()返回-1
都会被信号终止
IPC
sys/ipc.h
管道
unistd.h
必须用mkfifo命令创建
读写和一般文件一样
sys/shm.h
生成key,一个大整数ftok
shmget(key,size,0666|IPC_CTEAT|IPC_EXECL)
后面两个宏用的二进制的9-10位
获取时
shmegt(key,0,0)
删除shmctl(shmid,IPC_RMID,0);
struct shmid_ds ds;
权限可以修改,大小不能修改
获取文件状态:shmctl(shmid,IPC_STAT,&ds);
修改文件状态:shmctl(shmid,IPC_SET,&ds);
void* shmat(shmid,0,0);
返回可使用的空间头地址
第二个0是系统自己选择空间位置
第三个参数是只读,读写之类的,0为读写
shmdt(p);脱接
ipcs命令
-a 所有
-m 共享内存
-q 消息队列
-s 信号量集
ipcrm -m/q/s id删除
消息队列
sys/msg.h
msgget同上
int msgsnd(int msgid,void* buf,size_t,int flags)
buf可以指向一个第一个成员为long mtype的结构体
大小可以除去这个long的大小
成功返回0,失败返回-1
int msgrcv(int msgid,void* buf,size_t,it msgtype,int flags)
msgtype为0时都接受
>0指定消息
<0指定小于指定消息的消息
将队列里小的全部接收完之后才会接受大的
chdir函数不能使用相对路径
自学部分
for_each(InputIterator op1,InputIterator op2,UnartProc op)
调用op(op1~op2)
会改变op1,op2对应的值
transform(coll.begin(),coll.end(),coll.begin(),bind2nd(plus<int>(),10))
将coll.begin开始到end()每一项经过处理给从begin()开始的每一项
defference_type count(pos1,po2,const T& value)
查找等于value的个数
count_if(pos1,pos2,UnaryPredicate op)
返回令op(elem)返回true的元素个数
在关联容器中提供count函数
min_element(pos1,pos2);
min_element(pos1,pos2,op);
max_element(pos1,pos2);
max_element(pos1,pos2,op);
op(elem1,elem2);
find(pos1,pos2,const T& value);
find_if(pos1,pos2,op)
返回等于value或op返回true的第一个
失败返回end;
已序容器使用lower_bound(),upper_bound(),equal_range(),binary_search()性能更好
关联容器提供find()成员函数
search_n(pos1,pos2,Size count,value)
search_n(pos1,pos2,Size count,value,op);
返回符合条件的第一个元素位置
第二种形式 是连续count个元素使op(elem,value)返回true的第一个元素位置
失败返回end;
mmap()
sys/mman.h
参数很麻烦,实时映射用
文件夹操作
dirent.h
DIR* dir=opendir(path);
错误返回null
struct dirent* ent;
接受文件夹内部文件信息
readdir(dir)生成一个dirent结构体,然后返回指针给ent
dirent->char d_name[256]文件名,包含"."文件和".."文件
->unsigned char d_type 文件类型 4代表文件夹 可以用DT_BLK,DT_CHR系列宏函数测试
-> ino_t d_ino 文件的i节点
-> off_t d_off 下一个文件的偏移量
-> unsigned short d_reclen不知道干吗的
文件
struct stat s=[];
stat("xx.xx",&s);
错误返回-1
获取stat数组
s.st_ino 文件i结点
s.st_size 文件大小
s.st_nlonk 硬链接数量
s.st_mtime 时间,秒
s.st_mode 权限
可以使用 s.st_mode & 07777修改 取后四位
S_ISREG,S_ISDIR(s.st_mode)可以判断类型
access 有权限返回0
chmod("xx.xx",0644);
truncate("xx.xx",100) 修改文件大小,单位字节
fcntl
struct flock{short l_type;//锁类型
short l_whence;//锁的起点
off_t l_start;//锁的起点的偏移量
off_t l_lenth;//锁长度
pit_t l_pid;//锁定进程id,只有F_GETLK使用,F_SETLK给-1
}
F_RWLCK 读锁
F_WRLCK 写锁
F_UNLCK 无锁
fcntl("xx.xx",F_SETLK,&flock);
失败返回-1
F_SETLKW等待
进程运行状态
S 休眠
R 正在运行
O 准备
Z 僵尸进程
子进程结束没有被wait或者waitpid都会成Z
_exit()和_Exit()一回事
exit()会先调用atexit()注册的函数
_Exit()立刻结束
exit(int status)
wait(),waitpid()可以获取status
pid_t wait(int* status);
pit_t waitpid(pid_t pid,int* status,int options)
waitpid第一个参数
-1等待子进程中任何一个
>0特定子进程
0 同组子进程任何一个
<-1特定同组子进程
第三个参数
0阻塞,WNOHANG 不阻塞
ececl("/bin/ls","ls","-l",NULL);
第一个参数 执行的文件
第二个参数 在任务管理器中的标示名
第三个参数 传入的参数
三个参数都必须是字符串
信号
kill -9 pid
发送信号给pid
ctrl+c SIGINT 2
ctrl+\ SIGQUIT 3
SIGKILL 9
SIGKILL和SIGSTOP 两个信号系统强制默认执行
linux中1-31 不可靠信号 ,不支持排队,多个积累之后只会执行一次
34-64 可靠信号,多个积累之后会排队执行多次
signal(SIGINT,fa),sigaction()
fa为一个参数为int返回为void的函数名或函数指针
SIG_DFL默认处理
SIG_IGN忽略处理
出错返回SIG_ERR;
kill(pid_t pid,int signo)
<0 指定pid
-1 发送所有进程,得有权限
0 发送本组所有进程
<-1 指定进程组id,发送进程组所有进程
alarm一个唯一的定时器,发送SIGALRM信号
信号集
sigset_t
初始化
sigemptyset(sigset_t* set); 清0
sigfillset()全1
sigismember(set,int)查看信号是否在其中
信号屏蔽
sigprocmask(int how,sigset_t* new,sigset_t *old)
new会代替old实现屏蔽
how的三个
SIG_BLOCK:new+old
SIG_UNBLOCK:old减去new中有的
SIG_SETMASK:new覆盖old
在解除屏蔽后会处理
sleep()返回剩余秒数
usleep()返回-1
都会被信号终止
IPC
sys/ipc.h
管道
unistd.h
必须用mkfifo命令创建
读写和一般文件一样
sys/shm.h
生成key,一个大整数ftok
shmget(key,size,0666|IPC_CTEAT|IPC_EXECL)
后面两个宏用的二进制的9-10位
获取时
shmegt(key,0,0)
删除shmctl(shmid,IPC_RMID,0);
struct shmid_ds ds;
权限可以修改,大小不能修改
获取文件状态:shmctl(shmid,IPC_STAT,&ds);
修改文件状态:shmctl(shmid,IPC_SET,&ds);
void* shmat(shmid,0,0);
返回可使用的空间头地址
第二个0是系统自己选择空间位置
第三个参数是只读,读写之类的,0为读写
shmdt(p);脱接
ipcs命令
-a 所有
-m 共享内存
-q 消息队列
-s 信号量集
ipcrm -m/q/s id删除
消息队列
sys/msg.h
msgget同上
int msgsnd(int msgid,void* buf,size_t,int flags)
buf可以指向一个第一个成员为long mtype的结构体
大小可以除去这个long的大小
成功返回0,失败返回-1
int msgrcv(int msgid,void* buf,size_t,it msgtype,int flags)
msgtype为0时都接受
>0指定消息
<0指定小于指定消息的消息
将队列里小的全部接收完之后才会接受大的
chdir函数不能使用相对路径
自学部分
for_each(InputIterator op1,InputIterator op2,UnartProc op)
调用op(op1~op2)
会改变op1,op2对应的值
transform(coll.begin(),coll.end(),coll.begin(),bind2nd(plus<int>(),10))
将coll.begin开始到end()每一项经过处理给从begin()开始的每一项
defference_type count(pos1,po2,const T& value)
查找等于value的个数
count_if(pos1,pos2,UnaryPredicate op)
返回令op(elem)返回true的元素个数
在关联容器中提供count函数
min_element(pos1,pos2);
min_element(pos1,pos2,op);
max_element(pos1,pos2);
max_element(pos1,pos2,op);
op(elem1,elem2);
find(pos1,pos2,const T& value);
find_if(pos1,pos2,op)
返回等于value或op返回true的第一个
失败返回end;
已序容器使用lower_bound(),upper_bound(),equal_range(),binary_search()性能更好
关联容器提供find()成员函数
search_n(pos1,pos2,Size count,value)
search_n(pos1,pos2,Size count,value,op);
返回符合条件的第一个元素位置
第二种形式 是连续count个元素使op(elem,value)返回true的第一个元素位置
失败返回end;