unix高级编程知识总结131003

131003
---------------------------------------------------------------------------I/O操作(文件系统)
文件的创建与关闭
 int open(const char *pathname,int flags);
 int open(const char *pathname,int flags,mode_t mode);
 int close(int fd);
文件的读写
 ssize_t read(int fd, void *buffer,size_t count);
 ssize_t write(int fd, const void *buffer,size_t count);

off_t lseek(int fd, off_t offset, int whence);

可以用fcntl函数改变一个已打开的文件的属性,可以重新设置读、写、追加、非阻塞等标志
 int fcntl(int fd, int cmd);
 int fcntl(int fd, int cmd, long arg);
 int fcntl(int fd, int cmd, struct flock *lock);

int ioctl(int d, int request, ...);//ioctl用于向设备发控制和配置命令
mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针来做而不需要read/write函数.
void *mmap(void *addr, size_t len, int prot, int flag, int filedes, off_t off);
int munmap(void *addr, size_t len);
---------------------------------------------------------------------------
---------------------------------------------------------------------------进程
进程概念
进程标志 ID
创建进程
 pid_t fork();
等待进程  //可以引申 孤儿进程 僵尸进程
 pid_t wait(int *stat_loc);
 pid_t waitpid(pid_t pid,int *stat_loc,int options);
进程结束
 exit();函数
子进程调用不同的程序 调用系统函数exec族函数解决
 int execl(const char *path,const char *arg,...);
 int execlp(const char *file,const char *arg,...);
 int execle(const char *path,const char *arg,...);
 int execv(const char *path,char *const argv[]);
 int execvp(const char *file,char *const argv[]):
守护进程 常驻内存程序
 后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程。信号处理所有的工作由子进程来处理.
进程间通信
 fifo//命名管道
 pipe//管道 父子进程间通信
 signal// 信号
 message queues//消息队列
 shared memory// 共享内存

---------------------------------------------------------------------------
---------------------------------------------------------------------------线程
线程的使用
 int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
 void pthread_exit(void *retval);
 int pthread_join(pthread *thread,void **thread_return);//等待线程 主线程结束,其它线程也会终止
---------------------------------------------------------------------------
---------------------------------------------------------------------------网络编程
linux的设备无关性
int socket(int domain, int type,int protocol)
 domain通讯协族(AF_UNIX和AF_INET等)
 type通讯协议(SOCK_STREAM,SOCK_DGRAM等)
int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
 sockfd 文件描述符
 my_addr:是一个指向sockaddr的指针.
 addrlen:是sockaddr结构的长度.
int listen(int sockfd,int backlog)
 backlog:设置请求排队的最大长度
int accept(int sockfd, struct sockaddr *addr,int *addrlen)//返回clifd
 sockfd:是listen后的文件描述符
 addr,addrlen是用来给客户端的程序填写的,服务器端只要传递指针就可以了.
int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
 sockfd:socket返回的文件描述符.
 serv_addr:储存了服务器端的连接信息.其中sin_add是服务端的地址
 addrlen:serv_addr的长度
服务器端流程
socket-->bind-->listen-->accept
客户端流程
socket-->connect
读写函数
ssize_t write(int fd,const void *buf,size_t nbyte)
ssize_t read(int fd,void *buf,size_t nbyte)
以下两个函数一般用在非套接字的网络程序当中(UDP)
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr * from int *fromlen)
int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen)
循环服务器  并发服务器  TCP UDP 多路复用I/O
int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *except fds,struct timeval *timeout)
 nfds所有我们监控的文件描述符中最大的那一个加1
 readfds所有要读的文件文件描述符的集合
 writefds所有要的写文件文件描述符的集合
 exceptfds其他的服要向我们通知的文件描述符
 timeout超时设置.
为了设置文件描述符我们要使用几个宏.
 void FD_SET(int fd,fd_set *fdset)//FD_SET将fd加入到fdset
 void FD_CLR(int fd,fd_set *fdset)//FD_CLR将fd从fdset里面清除
 void FD_ZERO(fd_set *fdset)//FD_ZERO从fdset中清除所有的文件描述符
 int FD_ISSET(int fd,fd_set *fdset)//FD_ISSET判断fd是否在fdset集合中

---------------------------------------------------------------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值