最近在认真学习Linux,Linux 的强大又让我打开了一个新的世界,这篇文章主要总结我在学习Linux 时一些小的知识点,希望能帮助到更多还在为编程奋战的人
1.system 和exec 的区别?
(1)exec 是Linux 中唯一一个启动新进程的函数,exec函数会直接在你的进程中执行新的程序,新的程序会覆盖你的程序,除非调用错误,否则永远都走不到exec后面的代码
相当于调用新的进程
(2)system 内部封装了fork() 和 exec ,是用shell 来调用程序,在单独的进程中执行命令,执行完成之后便会回到你的代码中,相当于fork()了一个新的子进程
2.什么是阻塞,什么是非阻塞?
用形象的话来说:
阻塞: 干完再回来,干不完不许回来
非阻塞:你先干着,我看看有没有其他事,干完告诉我一声就行
比如说:
send()函数:调用send 函数发送一定的字节,在系统内部,send 只是把数据拷贝到TCP/IP协议栈的输出缓冲区,执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的缓冲区来保存你的代码时,就会有阻塞和非阻塞之分,阻塞:send函数将不返回直到系统的缓冲区有足够的空间把你要发送的数据copy过去才返回,非阻塞:
会立即返回
3.同步和异步的区别?
同步: 在发出一个功能调用时,在没有得到结果之前,该调用就不返回
异步:当一个异步调用发出后,调用者不能立即得到结果,实际处理这个调用的部件完成后,通过三种:状态,通知,和回调来通知调用者
(状态:调用者需要每隔一段时间检查一次,效率比较低,通知的效率比较高,回调与通知大致相同)
4.阻塞调用和非阻塞调用
阻塞调用:调用结果返回之前,当前线程会被挂起,函数只有得到结果之后才返回
非阻塞调用:不会立即得到结果之前,该函数不会阻塞当前线程,而是立即返回
5.阻塞调用与同步调用的区别
阻塞调用:当前线程就会被挂起,直到有数据为止
同步调用:很多线程都是激活的,只是没有返回值而已,当前线程还会处理其他消息
6.简述for()函数的功能
(1)原型
#include
pid_t fork(void);
(2)功能:创建子进程
(3)函数特点:
执行成功:执行一次,返回两次
父进程:返回子进程的ID号
子进程:返回0
执行失败:返回-1
(4)执行过程
fork()函数会复制当前进程,在内核进程表中创建一个新的进程表项,新的进程表项中有许多与原进程相同(堆指针,栈指针,标志寄存器的值),但是也有不同:把该进程的父进程ID号设置为原来进程的ID号,原进程设置的信号处理函数不再对新进程起作用。
子进程的代码,数据(堆数据,栈数据,静态数据)都与父进程相同,数据的复制采用写时拷贝,即只有在任一进程对数据进行了写操作时,复制才会发生,但是使用时应该避免没必要的内存分配和数据复制
创建子进程后,父进程中打开的文件描述符默认在子进程中也是打开的,且文件描述符的引用计数+1,父进程的用户根目录,当前的工作目录等变量的引用计数均会+1.
7.关于Linux下文件传输工具的简单了解
(1)nfs :NETWORK FILE SYSTEM
网络文件系统:通过网络使不同的机器或者操作系统之间共享文件部分,设置 Linux系统之间的文件共享
NFS 只是一种文件系统,本身没有传输的功能,是基于RPC 协议实现的,才能达到两个linux 系统之间的文件目录共享
NFS 为C/S架构
(2)http:可以实现文件的上传和下载
(3)ftp:控制文件的双向传输
(4)scp: secure copy 用来进行远程文件拷贝的,数据传输使用ssh(ssh 是建立在应用层基础上的安全协议, ssh 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议)
(5)samba: 在Linux 和UNIX 系统上实现SMB(server message block 信息服务块)协议,是一种在局域网上共享文件和打印机的一种通信协议,它为局域网的不同计算机之间提供文件以及打印机资源的共享服务,SMB 协议是客户端/服务器型协议,客户端通过该协议可以访问服务器上的文件系统,打印机和其他资源
8. Linux 下Ubuntu 和 centos 的安装软件的命令
centos 下安装,卸载,更新软件的命令
rpm 安装:
rpm -ivh xxx.rpm 安装
rpm -Uvh xxx.rpm 更新
rpm -qa|grep xxx.rpm 查看是否安装
rpm -ql|grep xxx.rpm 查看安装到哪里了
rpm -e xxx.rpm 卸载
yum 安装
yum -y install XXX 安装
yum -y remove XXX 删除
yum -y erase XXX 删除
yum -y update XXX 更新
ubuntu 下的安装命令
apt-get
sudo apt-get install 安装
sudo apt-get remove 卸载
sudo apt-get update/upgrade 更新
dpkg
dpkg -i xxx.deb 安装
dpkg -r xxx.deb 卸载
dpkg -l|grep 查找
9.man page 一共分为九类
需要记住的有:第一类:linux 系统命令
第二类:系统调用
第三类:c 语言运行时库
第五类:配置文件
第八类:管理命令
10,内存有32位和64位代表的什么意思?
cpu 运算的数据都是由内存提供的,内存与cpu 的通信速度靠的是外部频率(外频:cpu 与外部组件进行数据传输/运算 倍频:cpu 内部用来加速工作性能的一个倍数,两者相乘为cpu 的频率)
每次工作可以传输的数据量的大小是由地址总线决定的,
北桥:(系统总线)(是内存传输的主要信道,传输速度快)
所支持的频率为前端总线速度(FSB),每次传输的位数为总线宽度
总线频宽 = FSB* 总线的宽度
常见的总线宽度有32位和64位
南桥(输入/输出总线I/O)(联系硬盘,usb, 网卡)
cpu 每次能处理的数据量称为字组大小,字组大小依据cpu 的设计主要有32位和64位,现在所称的计算机是32位或者64位主要依据是cpu 能解析的字组大小而来