linux学习
yxj_1989
这个作者很懒,什么都没留下…
展开
-
linux编程中对死锁的一点感想
死锁是由于一系列线程竞争一些列资源产生的永久阻塞。导致死锁的有两种情况: 1.自死锁(往往被忽略) 一个线程在拥有某个资源的情况下又试图申请对该资源的使用,陷入到自死锁。 2.另外一种情况是线程1用于资源A,线程2拥有资源B,这时候线程1申请资源B,线程2申请资源A,陷入了相互等待的境地,造成死锁。原创 2013-07-17 22:18:42 · 774 阅读 · 0 评论 -
在网络编程的时候使用非阻塞的connect
对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听。此时服务器socket允许客户端进行连接,backlog提示没被ac转载 2013-07-23 17:31:22 · 1971 阅读 · 0 评论 -
关于tcp协议断开连接以及在socket编程时候连接的一些理解
要释放一个TCP连接,需要通过四次握手过程,这是由TCP的半关闭特性造成的,因为TCP连接时全双工的,因此,需要TCP两端要单独执行关闭。值得注意的是,主动关闭的一端在发送FIN之后,依然还能正常接收对方的数据,只是通知对方它已经没有数据需要发送了,同理,被动关闭的一端在收到FIN之后,仍然可以发送数据,直到它自身同样发出FIN之后,才停止发送数据。 TCP连接的超时问题:原创 2013-07-23 17:57:20 · 1529 阅读 · 0 评论 -
信号量的使用步骤
信号量的使用如下步骤小结1.声明信号量sem_t sem1;2.初始化信号量sem_init(&sem1,0,1);3.sem_post和sem_wait函数配合使用来达到线程同步4.释放信号量int sem_destroy (sem_t *sem1);原创 2013-08-01 21:34:13 · 1578 阅读 · 0 评论 -
父进程和子进程关于数据和文件描述符的继承的理解
用fork()函数建立的子进程几乎与父进程完全一样,子进程中的所有变量均保持他们在父进程中的值(当然fork的返回值除外),因为自己称可用的数据是父进程可用数据的拷贝,并且其占用不同的内存地址空间(当然逻辑地址可能是一样的),这就保证了在一个进程中的变量数据变化不会影响到另外一个进程。这一点非常重要。 但是有一点要特别注意的,在父进程打开的文件,那么在子进程中也会打开,继承了打开的文件描原创 2013-08-01 17:30:00 · 4848 阅读 · 0 评论 -
linux网络编程中的pol和epolll函数总结
poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明: #include int poll(struct pollfd fds[], nfds_t nfds, int timeout);参数说明:fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符原创 2013-07-28 10:29:54 · 1306 阅读 · 0 评论 -
在linux的shell脚本中,双引号,单引号,以及反单引号的作用介绍,以及env以及set的作用
首先单引号与双引号的最大不同就是双引号可以保有变量的内容,但是单引号仅能是一般的字符而不会有特殊的字符 如变量str=name 那么str1=“$str is”,之后显示str的结果是name is 如果str2='$str is',那么结果是$str is,可以看出没有用变量str的内容代替str。 在一串指令中,在反引号之内的指令将会被先执行,而其原创 2013-07-28 17:31:24 · 1570 阅读 · 0 评论 -
对linux中多线程编程中pthread_join的理解
在Linux中,默认情况下是在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设置Threads attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源,详细资料查看Threads attributes。 其实在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个原创 2013-08-04 21:32:39 · 4399 阅读 · 0 评论 -
Linux多线程编程的时候怎么查看一个进程中的某个线程是否存活
pthread_kill:别被名字吓到,pthread_kill可不是kill,而是向线程发送signal。还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。int pthread_kill(pthread_t thread, int sig);向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默原创 2013-09-10 17:34:36 · 2011 阅读 · 0 评论