c++培训周总结6

培训部分

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;

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值