- 博客(145)
- 收藏
- 关注
转载 【Linux基础】数据存储优先顺序
(1)函数说明计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,因此在有些情况下,需要对这两个字节存储优先顺序进行相互转化。这里用到了四个函数:htons、ntohs、htonl、ntohl。这四个地址分别实现网络字节序和主机字节序的转化,这里的h代表host,n代表network,s代表short,l代表long。通常16位的
2013-06-28 14:37:20
914
转载 【Linux基础】地址格式转换
1.((1)函数说明通常用户在表达地址时采用的是点分十进制表示的数值(或者是以冒号分开的十进制IPv6地址),而在通常使用的socket编程中所使用的则是二进制值,这就需要将这两个数值进行转换。这里在IPv4中用到的函数有inet_aton、inet_addr和inet_ntoa,而IPv4和IPv6兼容的函数有inet_pton和inet_ntop。由于IPv6是下一代互联网的标准协议,因此
2013-06-28 14:30:58
583
转载 【Linux基础】域名、主机名与IP地址转换
(1)函数说明通常,人们在使用过程中都不愿意记忆冗长的IP地址,尤其到IPv6时,地址长度多达128位,那时就更加不可能一次次记忆那么长的IP地址了。因此,使用主机名将会是很好的选择。在Linux中,同样有一些函数可以实现主机名和地址的转化,最为常见的有gethostbyname、gethostbyaddr、getaddrinfo等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化。其
2013-06-27 17:13:32
2539
转载 【Linux基础】套接字数据结构
C程序进行套接字编程时,常会使用到sockaddr数据类型和sockaddr_in数据类型。这两种数据类型是系统中定义的结构体,用于保存套接字信息。下面首先介绍这两个重要的数据类型:sockaddr和sockaddr_in,这两个结构类型都是用来保存 socket 信息的,如下所示:struct sockaddr {unsigned short sin_family; /*地址族*/
2013-06-27 17:10:48
877
转载 【Linux基础】套接字socket
套接字(socket)的本义是插座,在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。人们常说的socket是一种特殊的IO接口,它也是一种文件描述符。Socket是一种常用的进程间通信机制,通过它不仅能实现本机上的进程间通信,而且通过网络能够在不同机器上的进程间进行通信。1.socket定义套接字由3个参数构成:IP地址、端口号、传输层协议,以区分不同应用程序进程间的网络通
2013-06-25 10:22:27
749
转载 【Linux基础】IP地址、端口与域名
1. 1.IP地址IP地址的作用是标识计算机的网卡地址,每一台计算机都有一个IP地址。在程序中是通过IP地址来访问一台计算机的。本节将讲述IP地址的一些知识。IP地址是用来标识全球计算机地址的一种符号,就比如一个手机的号码,使用这个地址可以访问一个计算机。IP地址具有统一的格式。IP地址是32位长度的二进制数值,存储空间是4个字节。例如:11000000 10101000 00000001
2013-06-25 10:21:04
1853
转载 【Linux基础】TCP/IP基本概念
TCP/IP协议(Transmission Control Protocol/ Internet Protocol)叫做传输控制/网际协议,又叫网络通信协议。TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但实际上是一组协议,它包含了上百个功能的协议,如ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等,这些协议一起被称为TCP/IP协议。TCP/IP协议族中一些
2013-06-24 14:06:53
703
转载 【Linux基础】信号量应用实例
信号量相关函数System V信号量所用到的基本系统调用有三个:函数semget()是创建一个新信号量或取得一个已有信号量的键。函数semop函数用于改变信号量的值。函数semctl允许直接控制信号量信息。信号量相关函数的语法如表 9‑10、表 9‑11、表 9‑12和表 9‑13所示:01.jpg (35.81 KB, 下载次数: 0)下载附件保存到相册
2013-06-24 14:04:52
722
转载 【Linux基础】信号量基本操作
信号量与其他进程间通信方式不大相同,它主要提供对进程共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。信号量本质上是一个非负的整数计数器。信号量同步的原理实际上就是操作系统中所用到的PV原语。一次P操作使信号量sem减1,而一次V操作使sem加1。进程(线程)根据信号量的值来判断是否对公共资源
2013-06-23 16:52:21
671
转载 【Linux基础】消息队列应用
1. 消息队列的相关函数消息队列的实现包括创建或打开消息队列、添加消处、读取消息和控制消息队列这四种操作。其中创建或打开消息队列使用的函数是msgget,这里创建的消息队列的数量会受到系统消息队列数量的限制;添加消息使用的函数是msgsnd函数,它把消息添加到已打开的消息队列未尾;读取消息使用的函数是msgrcv,它把消息从消息队列中取走,与FIFO不同的是,这里可以指定取走某一条消息;最后控
2013-06-23 16:49:52
683
转载 【Linux基础】消息队列概述
消息队列简称队列,其标示符为队列ID,可以通过命令ipcs –q 查看当前系统的消息队列。消息队列就是一个消息的链表。用户可以从消息队列中添加消息,读取消息等。从这点上看,消息队列具有一定的FIFO的特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向其中添加消息;对消息队列有读权限的进程见分晓可以从消
2013-06-22 12:00:00
656
转载 【Linux基础】共享内存应用
共享内存相关函数使用共享内存在进程间通信,首先得创建共享内存,这里使用函数是shmget(shmget返回相应的标识符),然后调用shmat()完成共享内存区域映射到进程地址空间。这时候进程就可以对共享内存进行操作了。操作完成后可以撤销映射,通过函数shmdt实现。共享内存相关函数语法如表 9‑3、表 9‑4、表 9‑5所示:01.jpg (91.53 KB, 下载
2013-06-22 11:58:50
607
转载 【Linux基础】共享内存概述
共享内存可以说是最有用的进程间通信方式。不同进程共享内存的意思是:同一块物理内存被映谢到进程各自的进程地址空间,不同进程可以及时看到某进程对共享内存的数据进行更新。采用内存共享通信的显而易见的好处是效率高,进程可直接读写内存,不需要任何数据的复制。当多个进程共享一段内存时,这时就需要某种同步机制了,如前而所说的互斥锁。共享内存和进程间的关系图如图 9‑4所示: 01
2013-06-21 11:59:13
444
转载 【Linux基础】有名管道
1.有名管道概述有名管道又称FIFO.前面所讲的无名管道,只能用于具有亲缘关系的进程间通信,在有名管道提出后,该限制得到了克服,它可以使互不相关的两个进程实现彼此的通信。FIFO不同于无名管道,它提供了一个路径与其关联,以文件形式存在于文件系统中。在建立有名管道后,就可以把它当作普通文件来进行读写操作。值得注意的是,FIFO严格遵循先进先出。管道不支持如lseek()等文件定位操作。2
2013-06-21 11:57:45
598
转载 【Linux基础】无名管道
1.无名管道的概述平时我们所说管道,就是指无名管道,它具有以下特点:管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立两个管道只能用于具有亲缘关系的进程之间通信,也就是父子进程或兄弟进程之间。对进程而言,管道就是一个文件,但它不是一个普通的文件,只存在于内存中。一个进程向管道中写的内容被管道的另一端的进程读出。写入的内容每次都添加在管道缓冲区的未尾,并且每次都
2013-06-20 10:21:33
653
转载 【Linux基础】管道
管道是linux系统中最古老的进程间通信手段,它是作用是把一个程序的输出直接连接到别一个程序的输入。例如在shell中输入命令:ls | more 这条命令的作用是列出当前目录下的所有文件和子目录,如果内容超过一页则自动进行分页。符号“|”就是shell为”ls”和“more”命令建立的一条管道,它将ls的输出直接送进了more的输入,如图 9‑1所示。本文转载于唯C教育,【Lin
2013-06-20 10:20:12
451
转载 【Linux基础】信号量
信号量是一个非负的整数计数器,是操作系统中所用到的PV原语,它主要应用于进程或线程间的同步与互斥。那么PV原语是什么呢?PV原语的工作原理如下:PV原语是对整数计数器信号量sem的操作。一次P操作使sem减一,而一次V操作,使sem加一。线程(或进程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量sem的值大于等于零时,该线程(或进程)具有公共资源的访问权限;相反,当信号量sem的值
2013-06-19 14:37:31
546
转载 【Linux基础】互斥锁
在同一进程中的线程是共享进程的资源和地址空间,因此对资源的访问每次只能有一个线程,这时就需要线程同步与互斥。线程间的同步(实指线程间的通信):通常一个线程相对于另一个线程的运行速度是不确定的,这就是说线程是在异步环境下运行,每个线程都会以不可预知的速度向前运行。但是相互合作的线程需要在某些确定点上协调工作,当一个线程到达了这些点后,除非另一进程已经完成了某些操作,否则就不得不停下来等待别的线程来完
2013-06-19 14:33:04
624
转载 【Linux基础】线程基本操作
在这里我们介始是Pthread线程库,它是由POSIX提供的一套通用的线程库,具有很好的移植性。Pthread线程库是一套用户级线程库,在linux上实现时,是使用了内核级线程来完成,目的是为了提高线程的并发性。线程创建和退出1.函数说明在linux中,创建线程所用的函数是pthread_create.而创建线程实际上就是确定调用该线程函数的入口点。线程退出有两种方法:一种是在线程被创
2013-06-18 11:11:56
751
转载 【Linux基础】线程发展历程
线程技术是在上世纪60年代被提出,而真正应用到操作系统中还是上世纪80年代中期。现在,多线程已经被许多操作系统所应用,其中包括Linux系统。在Linux2.2内核中,线程也是通过fork创建的“轻”进程,并不存在真正意义上的线程。这也就是说,线程实际上是通过进程来模拟的,新的进程是原来进程的子进程。需要注意是,这时线程的个数很有限,最多只能有4096个进程/线程同时运行。在Linux2.
2013-06-18 11:09:20
718
转载 【Linux基础】线程概述
在linux系统中,当进程进行切换等操作时需要负责的上下文切换等动作,而因每一个进程都拥有自已的数据段,代码段和堆栈段,从造成进程的切换造成很大的花销。为了减少处理机的空转时间,支持多处理器和减少上下文切换开销,这样出现了一个新概念—线程。线程是一个进程内的基本调度单位,也可以称为轻量级进程,一个进程内可有多个线程。线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描符和信号
2013-06-17 09:33:18
533
转载 【Linux基础】编写守护进程
创建守护进程是可以按一定的流程来实现的,可分为五个步骤:1.创建子进程,父进程退出这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到了与控制终端的脱离。在Linux中父进程先于子进程退出会造成子进程成为孤儿进程,而每
2013-06-17 09:31:45
835
转载 【Linux基础】守护进程概述
守护进程(Daemon)是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。由于在
2013-06-16 09:06:52
498
转载 【Linux基础】wait和waitpid函数
1.wait和waitpid函数说明wait函数是用于使父进程阻塞,直到一个子进程终止或者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经终止,则wait就会立即返回。waitpid函数的作用和wait一样,但它并不一定要等待第一个终止的子进程,它还有若干项,如可提供一个非阻塞版本的wait功能。实际上wait函数只是waitpid函数的一个特例。2.w
2013-06-16 09:05:34
615
转载 【Linux基础】exit和_exit函数说明
在系统中有大量的进程时,有可能会让系统资源消耗殆尽。因此,要在用完进程后终止进程。Linux用到的函数为exit和_exit函数。当程序执行exit和_exit时,进程会条件地停止所有操作,终止本进程的运行。这两个数的区别如图 7‑2所示:01.jpg (12.66 KB, 下载次数: 0)下载附件保存到相册设为封面2013-6-6 10:55 上传
2013-06-15 14:02:25
791
转载 【Linux基础】函数族
.exec函数族说明fork()函数是用于创建一个子进程,该子进程几乎拷贝了父进程的全部内容。那在新进程中如何运行新的程序呢?exec函数簇提供了一个在进程中启动另一个程序执行的方法。exec函数簇可以根据指定的文件名或目录找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新进程替换了。另外,这里的可执行文件既可以是二
2013-06-15 14:00:40
644
转载 【Linux基础】fork函数
ork函数和一般的函数有着很大区别,fork函数执行一次却返回两个值。1.fork函数说明在进程中使用fork函数,则会创建一个新进程,新进程则称为子进程,原进程称为父进程。由于fork函数返回两个值,则这两个进程分别带回它们各自的返回值,其中父进程的返回值是子进程的进程号,而子进程则返回0.因此,可以通过返回值来判定该进程是父进程还是子进程。使用fork函数得到的子进程是父进程的
2013-06-14 14:32:59
624
转载 【Linux基础】linux进程控制
在Linux系统中,常用于进程控制的函数有fork()函数、exec()函数族、exit()和wait()函数等。本文转载于唯C教育,【Linux基础】linux进程控制http://www.weicedu.com/forum.php?mod=viewthread&tid=110&fromuid=4(出处: http://www.weicedu.com/)
2013-06-14 14:24:06
474
转载 【Linux基础】进程模式
在Linux系统中,进程的执行模式划分为用户模式和内核模式。如果当前运行的是用户程序、应用程序或内核之外的系统程序,那么对应进程就在用户模式下运行:如果在用户程序执行过程中出现系统调用或发生中断事件,那么就要运行操作系统程序,进程模式就变成内核模式。用户进程既可以在用户模式下运行,也可以在内核模式下运行。如下图所示:01.jpg (22.44 KB, 下载次数: 0)
2013-06-13 15:30:28
1484
转载 【Linux基础】进程管理
启动进程进程加载有两种途径:手工加载和调度加载手工加载:手工加载又分为前台加载,和后台加载。前台加载:是手工加载一个进程最常用方式。一般地,当用户输入一个命令,如“ls -l”时就已经产生了一个进程,并且是一个前台进程。后台加载:往往是在该进程非常耗时,且用户也不急着需要结果的时候启动。常常用户在终端输入一个命令时同时在命令尾加上一个“&”符号。调度加载:在系统中有
2013-06-13 15:26:39
553
转载 【Linux基础】进程属性
1.进程标识进程最主要的属性就是进程号(PID,process ID)和它的父进程号(PPID,parent process ID).PID和PPID都是非零正整数。从进程ID的名字就可以看出,它就是进程的身份证号码,每个人的身份证号码都不会相同,每个进程的进程ID也不会相同。系统调用getpid()就是获得进程标识符。一个PID唯一地标识一个进程。一个进程创建一个新进程称为创建了
2013-06-13 15:24:49
1298
转载 【Linux基础】进程结构
局变量、常数及动态数据分配的数据空间(如malloc函数取得的空间)等代码段:存放的是程序代码数据。堆栈段:存入的是子程序返回地址、子程序的参数以及程序的局部变量。补充知识:一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—— 一般
2013-06-13 14:17:51
487
转载 【Linux基础】程序与进程
程序是一个普通文件,是机器代码指令和数据的集合,这些指令和数据存储在磁盘上的一个可执行映像(Executable Image)中。所谓可执行映像就是一个可执行文件的内容,例如,你编写了一个C源程序,最终这个源程序要经过编译、连接成为一个可执行文件后才能运行。源程序中你要定义许多变量,在可执行文件中,这些变量就组成了数据段的一部分;源程序中的许多语句,例如“i++; for(i=0; i
2013-06-13 14:14:14
695
转载 【Linux基础】综合实验:文件读写及上锁
1.实验目的通过编写文件读写及上锁的程序,进一步熟悉Linux中文件I/O相关的应用开发,并且熟练掌握open()、read()、write()、fcntl()等函数的使用。2.实验内容在Linux中FIFO(先进先出)是一种进程间的管道通信机制。本实验通过使用文件操作,仿真FIFO结构以及生产者-消费者运行模型。3.实验步骤(1)流程图该实验流程图如图所示
2013-06-12 15:37:09
7196
2
转载 【Linux基础】多路复用
前面的fcntl函数解决了文件的共享问题,接下来该处理I/O复用的情况了。总的来说,I/O处理的模型有5种。阻塞I/O模型:在这种模型下,若所调用的I/O函数没有完成相关的功能就会使进程挂起,直到相关数据到才会出错返回。如常见对管道设备、终端设备和网络设备进行读写时经常会出现这种情况。非阻塞模型:在这种模型下,当请求的I/O操作不能完成时,则不让进程睡眠,而且返回一个错误。非阻塞I/O
2013-06-12 15:35:47
799
转载 【Linux基础】文件夹
文件锁包括建议性锁和强制性锁。建议性锁要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁。强制性锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。在Linux中,实现文件上锁的函数有lockf和fcntl,其中lockf用于对文件施
2013-06-12 15:34:05
680
转载 【Linux基础】带缓存的IO操作
前面所述的文件IO操作是基于文件描述符的。这些都是基本的IO控制,是不带缓存的。本节说要介绍的IO操作是基于流缓冲的,它是符合ANSI C的标准IO处理,这里有很多读者已经非常熟悉的函数如:printf()、scanf()等。因此本节仅介绍最主要的函数。带缓存的文件IO操作是在内存中开辟一个“缓冲区”,为程序中的每一个文件使用。当执行读文件的操作时,从磁盘文件中将数据先读入内存“缓冲区”,
2013-06-12 15:26:06
908
转载 【Linux基础】不带缓存的IO操作
不带缓存的IO操作又称底层IO操作。文件底层I/O操作的系统调用主要用到5个函数:open()、close()、read()、write()、lseek()。这些函数的特点是不带缓存,直接对文件进行操作。虽然不带缓存的文件IO操作程序不能移植到非POSIX标准的系统(如Windows系统)上去,但是在嵌入式程序设计、TCP/IP的Socekt套接字程序设计、多路IO操作程序设计等方面应用广泛。
2013-06-12 15:15:56
1078
转载 【Linux基础】库函数
在输入输出操作中,直接使用底层系统调用的问题是它们的效率非常的低。为什么呢?(1)系统调用会影响系统的性能。与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从用户代码切换到内核代码运行,然后再返回用户代码。减少这种开销的好方法是,在程序中尽量减少系统调用次数,并且让每次系统调用完成尽可能多的工作。(2)硬件会对底层系统调用一次所能读写的数据块做出一定的限制
2013-06-11 16:29:51
706
转载 【Linux基础】系统调用
我们用很少量的函数就可以对文件和设备进行访问和控制。这些函数被称为系统调用,由Linux系统直接提供,它们也是通向操作系统本身的接口。Linux系统调用部分是非常精简的系统调用(只有250个左右)),它继承了UNIX系统调用中最基本和最有用的部分。这些系统调用按照功能逻辑大致可分为进程控制、进程间通信、文件系统控制、系统控制、存储管理、网络管理、socket控制、用户管理等几类。所谓系统调
2013-06-11 16:28:44
550
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅