Linux学习笔记(四):信息量、同步、互斥和网络编程

Gloria ·
更新时间:2024-11-10
· 701 次阅读

接上:
Linux学习笔记(一)
Linux学习笔记(二)
Linux学习笔记(三):函数、文件IO和线程

目录复习结构体:struct文件I/O:线程:主要学习内容信号量同步:按照一定的顺序有序的执行互斥:抢资源;谁先抢到资源就谁先执行网络编程:服务器:server客户端:client代码及演示收获及感悟 复习 结构体:struct

在这里插入图片描述

文件I/O: int open(char *pathname,int flag); eg:int fd = open(“1.txt”,O_RDWR);//打开文件 if(){ error; }success; int rte = read(fd,buf,sizeof(buf));//读取文件 if(rte < 0){ Error; }success; int ret = write(fd,buf,ret);//写文件 lseek(fd,0,SEEK_SET);//定位 close(fd);//关闭文件 线程: void *fun(char *x){ printf(“hello\n”); return “hello”; }//子线程 pthread_create(thread,NULL,fun,”hello”); void *buf; pthread_join(thread,&buf); 主要学习内容 信号量 //(线程间同步—P/V操作)先V(释放资源)和P(申请资源) int sem_init(sem_t *sem,int pshared,unsigned int value); int sem_wait(sem_t *sem);//P操作 int sem_post(sem_t *sem);//V操作

在这里插入图片描述
在这里插入图片描述

同步:按照一定的顺序有序的执行 sem_init(&sem,0,0); sem_post(&sem); //V操作 释放资源 信号量加1 sem_wait(&sem); //P操作 申请资源 信号量减1 互斥:抢资源;谁先抢到资源就谁先执行 互斥锁: 加锁:pthread_mutex_lock(&mutex); 解锁:pthread_mutex_unlock(&mutex); 网络编程: 服务器:server //建立连接 socket( );//创建套接字 声明:int socket(int domain, int type,int protocol) bind( );//绑定自己的IP 声明:int bind(int sockfd, struct sockaddr *my_addr, int addrlen) sockfd:是由socket调用返回的文件描述符. addrlen:是sockaddr结构的长度. my_addr:是一个指向sockaddr的指针. 在中有 sockaddr的定义 listen( );//监听是否有客户端向服务器发起连接 声明:int listen(int sockfd,int backlog) sockfd:是bind后的文件描述符. backlog:设置请求排队的最大长度.当有多个客户端程序和服务端相连 时, 使用这个表示可以介绍的排队长度. listen函数将bind的文件描述符变为监听套接字.返回的情况和bind一样. accept( );//接受客户端的请求 声明:int accept(int sockfd, struct sockaddr *addr,int *addrlen) sockfd:是listen后的文件描述符. addr,addrlen是用来给客户端的程序填写的,服务器端只要传递指针就可了. bind,listen和accept是服务器端用的函数, accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接. accept成功时返回最后的服务器端的文件描述符, 这个时候服务器端可以向该描述符写信息了. 失败时返回-1。 //接收数据 write( );//send( ); read( );//recv( ); //关闭 close( ); 客户端:client //建立连接 socket( ); connect( );//主动发起与服务器的连接 声明:int connect(int sockfd, struct sockaddr * serv_addr,int addrlen) sockfd:socket返回的文件描述符. serv_addr:储存了服务器端的连接信息.其中sin_add是服务端的地址 addrlen:serv_addr的长度 connect函数是客户端用来同服务端连接的.成功时返回0,sockfd是同服务端通讯的文件描述符 失败时返回-1. //接收数据 read( );//recv(); write( );//send(); //关闭 close( ); 代码及演示

加锁和解锁:

#include #include #include #include pthread_mutex_t mutex; pthread_t thread; void *fun(){ while(1){ pthread_mutex_lock(&mutex); sleep(0); printf("wyj\n"); pthread_mutex_unlock(&mutex); } return "welcome"; } int main(){ pthread_mutex_init(&mutex,NULL); pthread_create(&thread,NULL,fun,NULL); while(1){ pthread_mutex_lock(&mutex); sleep(0); printf("你好\n"); pthread_mutex_unlock(&mutex); } void *buf; pthread_join(thread,&buf); printf("%s\n",(char*)buf); return 0; }

网络编程:

#include #include #include #include int main(){ /*1.创建套接字*/ int sock = socket(PF_INET,SOCK_STREAM,0); if(sock bind(sock,(struct sockaddr*)(&myaddr),sizeof(myaddr))){ printf("bind error\n"); return -1; } printf("bind success\n"); /*3.监听*/ if(0 > listen(sock,10)){ printf("listen reeor\n"); return -1; } printf("listen success\n"); /*4.接受链接请求*/ accept(sock,); /*5.数据收发*/ //send()/recv(); /*6.关闭套接字*/ //close(); return 0; } 收获及感悟

在复习昨天学习的知识后,今天主要学习了信息量、同步、互斥和网络编程,其中主要介绍了同步下的P操作和V操作及注意事项、互斥下的解锁和加锁、网络编程的部分内容,今天学习的内容以前都是没有接触的,所以有一种新鲜感。


作者:ywsydwsbn



Linux 互斥 网络编程

需要 登录 后方可回复, 如果你还没有账号请 注册新账号