-
【Linux】 Samba 服务器安装配置实现与Windows系统的文件共享服务
2015-07-24 15:54:59Samba服务器是用来实现Linux与Windows系统之间文件传输服务的,如果经常需要在两个系统之间传送文件,安装Samba并配置共享路径是很有益的 如下是整个详细的配置过程,使用Ubuntu12.04LTS,网上也有很多其他配置方法...Samba服务器是用来实现Linux与Windows系统之间文件传输服务的,如果经常需要在两个系统之间传送文件,安装Samba并配置共享路径是很有益的
如下是整个详细的配置过程,使用Ubuntu12.04LTS,网上也有很多其他配置方法,但是大多含糊且繁琐
一. samba的安装:
sudo apt-get insall samba sudo apt-get install smbfs
二. 创建共享目录:
注意userdir是一个已经存在的用户在home目录下的用户目录,如果你为用户 zhangsan创建共享文件夹,那么将userdir替换为zhangsan即可
share是共享文件夹的名称,也可以换成其他自己喜欢的目录名
mkdir /home/userdir/share sodu chmod 777 /home/userdir/share
三. 创建Samba配置文件:
1. 保存现有的配置文件(修改配置文件之前的一个良好习惯)
sudo cp/etc/samba/smb.conf /etc/samba/smb.conf.bak
2. 修改现配置文件
sudo vim /etc/samba/smb.conf
在smb.conf最后添加
[share] path = /home/phinecos/share available = yes browsealbe = yes public = yes writable = yes
四. 创建samba帐户
sudo touch /etc/samba/smbpasswd sudo smbpasswd -a userid
userid是新的Samba的账户,然后会要求你输入samba帐户的密码
密码确认之后就添加成功。
[如果没有第四步,当你登录时会提示 session setup failed: NT_STATUS_LOGON_FAILURE]
五. 重启samba服务器
注意重启时,init.d目录下是否存在samba,本机实际目录下不存在samba,而是smbdsudo /etc/init.d/sambarestart
六. 测试
smbclient -L//localhost/share
七 使用
可以到windows下输入ip使用了,在文件夹处输入 "\\" + "ip或主机名" + "\" +"share"
例如:
\\223.168.1.101\share
-
Linux环境下多线程并发服务器
2020-02-21 09:35:12摘要:本文主要记录linux下多线程并发服务器开发,在次之前,我想先梳理一下线程相关的知识,闲啰嗦的道友可以直接略过,后面会有源代码链接和测试结果。 一、线程和进程 1、线程是进程的一条执行路径,称为轻量级...摘要:本文主要记录linux下多线程并发服务器开发,在次之前,我想先梳理一下线程相关的知识,闲啰嗦的道友可以直接略过,后面会有源代码链接和测试结果。
一、线程和进程
-
1、线程是进程的一条执行路径,称为轻量级进程。
-
2、所有线程都是在同一进程空间运行,共享该进程中的全部系统资源,例如虚拟地址空间,文件描述符和信号处理等等。
3、虽然说线程在同一进程空间运行,但是每个线程有各自的调用栈、寄存器环境、线程本地存储等。
4、进程中的多个线程并行执行不同的任务,达到并发的作用。
5、不同程序间交换数据,对于多进程,需要在用户空间和内核空间进行频换切换,开销大。对于多线程来说,使用全局变量,只需要在用户空间切换,开销小,效率高。
二、主线程和子线程
-
1、对于c和c++,我的理解是main函数就是主线程,因为程序运行是从main函数开始的,然后再main函数中创建的新进程就是子进程,每个子进程都有自己的线程id,多个子进程之间是平级的,同时运行,没有先后顺序。
-
2、主线程和子线程的关系:主线程退出,所有子线程就会退出,这时整个进程结束或者僵死。
3、为了避免僵死状态,主线程和子线程可会合和相分离两种关系。
(1)、可会合:主线程等待子线程结束之后,在做下一步操作,这样整个程序就会有条不紊地结束,释放掉所有占用的资源。 (2)、相分离:子线程的结束和主线程之间没有关系,子线程结束后自动释放掉资源,主线程无需等待,相比可会合,高效稳定得多。
三、多线程可能用到的知识
-
1、临界资源:多个线程共享的资源,比如一个变量。 2、临界区:临界资源的范围。
-
3、互斥锁:多个线程共享一个临界资源,难免会发生竞争,为了避免发生竞争,就需要用到互斥锁。
4、死锁:用到互斥锁的话,可能会产生死锁,当A线程正在使用资源1的同时想要使用资源2,但是资源2被线程B持有,如果此时线程B也想使用资源1,A和B就会打架,实力不相上下,谁也不想把资源让给对方,此时就产生死锁了。
5、总结一下产生死锁的条件就是:互斥、占有且等待、循环等待、不可抢占。
四、多线程编程相关函数
1、线程属性设置函数,可参考博客:https://www.cnblogs.com/jacklikedogs/p/4030048.html。在项目中我们一般主要设置线程堆栈大小、线程分离状态两个属性,其他可以使用默认值。
typedef struct { int detachstate; 线程的分离状态,非分离 状态只有当pthread_join() 函数返回时,创建的线程才算终,才能释放自己占用的系统资源 int schedpolicy; 线程的调度策略 struct sched_param schedparam; 线程的调度参数 int inheritsched; 线程的继承性 int scope; 线程的作用域 size_t guardsize; 线程栈末尾的警戒缓冲区大小 int stackaddr_set; void * stackaddr; 线程栈的位置 size_t stacksize; 线程栈的大小 }pthread_attr_t;
2、创建进程函数
int pthread_create( pthread_t *restrict tidp, //新线程ID。 const pthread_attr_t *restrict attr, //线程属性,默认为NULL void *(*start_rtn)(void *), //子进程执行的程序,函数指针 void *restrict arg //子进程函数的参数,这个参数类型为任意类型,所以子进程需要多个参数时,我们需要打包成一个结构体,传 //入结构体 );
3、销毁结构体函数
int pthread_attr_destroy(pthread_attr_t *attr); //结构体使用结束后应该销毁 成功返回0;
4、会合函数
int pthread_join(pthread_t thread, void **retval);//主线程要等待非分离的子线程结束才能完全释放资源 成功返回0;
5、初始化锁函数
Int pthread_mutex_init(pthread_mutex_t *restrict_mutex,//锁的一种属性结构体 const pthread_mutextattr_t *restrict attr//NULL为默认值普通锁 )
6、锁操作函数
int pthread_mutex_lock(pthread_mutex_t *mutex);//获取阻塞锁 int pthread_mutex_trylock(pthread_mutex_t *mutex);//获取非组赛锁 int pthread_mutex_unlock(pthreadd_mutex_t *mutex);//释放锁
五、代码实现
注:服务器和客户端相互配合使用,这里只贴出服务器server的主程序main程序,main程序中调用的一些用户程序包含在其他的c文件,我将它提交的git服务器进行管理,有需要的朋友点击以下链接查看。
服务器端完整代码链接:点击查看
客户端完整代码链接:点击查看
server_main.c: #include "server.h" int main(int argc,char **argv) { int server_port; int sockfd = -1; int clienfd = -1; int re_val = -1; pthread_t pthread_id; struct sockaddr_in clien_addr; socklen_t clienaddr_len; //pthread_args_t pthread_args ; pthread_args_t *pthread_args ; //参数解析 re_val = argument_parse(argc, argv, &server_port); if(re_val < 0) { printf("参数解析错误!\n"); exit(0); } //套接字初始化 re_val = socket_init(server_port,&sockfd); if(re_val < 0) { printf("套接字初始化错误!\n"); } //服务器开始工作 while(1) { //等待客户端连接上来 printf("serve is waitting to connect new client...\n"); mylog(__FUNCTION__,__LINE__,INFO,"serve is waitting to connect new client...:%s\n",strerror(errno)); if((clienfd = accept(sockfd,(struct sockaddr *)&clien_addr,&clienaddr_len)) <0 ) { printf("serve accept failed: %s\n",strerror(errno)); mylog(__FUNCTION__,__LINE__,ERROR,"server accept faild:%s\n",strerror(errno)); return -1; } printf("Accept new client[%s:%d] scuccessfully.\n",inet_ntoa(clien_addr.sin_addr),ntohs(clien_addr.sin_port)); mylog(__FUNCTION__,__LINE__,INFO,"Accept new client[%s:%d] scuccessfully.\n",\ inet_ntoa(clien_addr.sin_addr),ntohs(clien_addr.sin_port)); //线程开始 pthread_args = (pthread_args_t *)malloc(sizeof(pthread_args_t)); //pthread_args.clienfd = clienfd; pthread_args->clienfd = clienfd; thread_start(&pthread_id, pthread_work, pthread_args); } return 0; }
七、测试结果
流程:通过客户端采集数据,这里采集的是室内环境下的温度,然后通过TLV(用户自定义协议)发送给服务器中的数据库中保存。 以下显示图片均是服务器端接收到的数据,数据格式是:设备号28-041731f7c0ff + 温度 + 时间。
第一次测试结果:
显示一些特殊符号<、[ 等乱码,经过检查代码发现下面一个问题:close(sockfd);我以为客户端连接上建立了新的文件描述符,这个描述符就可以关闭,其实不然,关闭就会出现乱码,所以后面的程序中直接将它删除,数据正常。//线程开始 //close(sockfd); pthread_args = (pthread_args_t *)malloc(sizeof(pthread_args_t)); //pthread_args.clienfd = clienfd; pthread_args->clienfd = clienfd; thread_start(&pthread_id, pthread_work, pthread_args);
第二次测试结果:
client[4]代表第一个客户端已连接
client[5]代表第二个客户端已连接client[4]单独连接的适合一切正常,但是当client[5]连接上来的时候,client[4]就被顶下去了。和小伙伴们一起分析:
*定义子线程参数结构体*/ typedef struct { int clienfd;//客户端文件描述符 int count;//线程数 pthread_mutex_t lock;//线程锁 }pthread_args_t;
pthread_args_t pthread_args;//这是传给子线程的参数结构体
pthread_create //在这里调用问题就在于结构体定义的方式,因为子线程和主线程在同一个进程空间运行,子进程之间共享资源,我在主函数栈中静态分配一个结构体空间,每来一个客户端都会对这个结构体中clienfd的值进行改变,所以后面连接的都是最后一个连接上来的客户端,经过和小伙伴们分析总结出以下解决方案:
1、 传单个值
2 、malloc动态分配内存,然后传地址//线程开始 pthread_args = (pthread_args_t *)malloc(sizeof(pthread_args_t));
3、 静态分配内存,可以在栈上分配一个足够大的,可以容纳所有参数,然后传地址;
int main() { pthread_args_t pthread_args[10000]; create_x(...., &pthread_args[i]); }
第三次测试结果:
结果显示,服务器有序的稳定的向客户端4和客户端5交叉接收数据。。。。
注:在这里感谢以下团队小伙伴的帮助,和一群优秀的小伙伴一起学习事倍功半!代码程序肯定有很多地方不够完美,请朋友们积极指出,谢谢~~~~
-
-
如何通过Samba共享Linux文件夹
2017-09-01 09:49:48Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件。...smb.conf中包含了多个全程单元,每个单元的Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件。
1. 配置Linux共享路径。
vi /etc/samba/smb.conf
编辑/etc/samba目录下的smb.conf文件。
smb.conf中包含了多个全程单元,每个单元的名字放于方括号([])中,方括号也是区分各个单元的标识。第一个单元是[global],用于一些全局设置,对于不熟悉samba的用户来说,一般不要对此单元进行修改。第二个单元是[home],它的作用是使linux用户可以从其它机器上连接到自己的home目录。要设置一个特定的共享目录,建议在smb.conf文件尾部增加一个全程单元。一般包括几条语句。下面是一个例子:
[Share]
comment = Shared Folder with username and password
path = /home/zwq
valid users = zwq
public = no
writable = yes
printable = no
create mask = 0765说明:
comment:提示,在windows的网络邻居上显示为备注。
path:linux上共享目录
valid users: 允许访问linux共享目录的用户,此用户需是linux的samba用户
public:允许guest访问
writable: 允许用户写
printable: 若设为yes,则被认定为打印机
create mask:在共享目录上建立的文件的权限2. 创建samba用户
SMB用户名,在下面的Windows访问时用到。此用户必须是在Linux系统中存在的用户,否则“smbpasswd -a”命令会失败。
useradd -m -s /bin/csh zwq
passwd zwq
smbpasswd -a zwq
3. 重启SMB服务。
/etc/init.d/smb restart
如果SMB服务未启动,请执行/etc/init.d/smb start启动。
如果想让系统重启后自动启动SMB服务,请在/etc/init.d/boot.local文件尾加入如下两行:
rcnmb start
/etc/init.d/smb start4. 在Windows中访问Linux共享的文件夹。
a. 在“开始 > 运行”中输入“\\Linux服务器IP地址”即可登录到目标服务器,如下所示:
b. 具体访问某目录,如Share,系统会弹出对话框,需要输入samba用户(zwq)。
输入用户名和密码后即可访问Linux系统中的文件,此用户名和密码即为上述增加的samba用户名和密码。
5. 把Linux的共享文件夹映射为Windows本地的一个磁盘分区。
a. 在“开始 > 运行”中输入“cmd”启动Windows命令行。
b. 执行net use Q: \\Linux服务器IP地址\Share 命令完成映射。
c. 打开Windows的“我的电脑”可以看到Q盘了。
-
Linux集群存储——day1——udev管理技术、多路径服务
2018-10-08 23:49:28存储技术分为:直连式存储,网络存储 直连存储 SCSI接口(双绞线) 小型计算接口、其接口对应的系统中的磁盘名是 sd开头 DAS技术 ... 是一个专用数据存储服务器,属于一个用于数据共享的...存储技术分为:直连式存储,网络存储
直连存储 SCSI接口(双绞线) 小型计算接口、其接口对应的系统中的磁盘名是 sd开头 DAS技术 将存储设备通过SCSI接口或者光纤通道链接计算机 优点:存储速度综合较快,短距离中性价比高 缺点:不能数据共享,在数据量巨大的时候,其性能下降较快 网络存储 NAS 是一个专用数据存储服务器,属于一个用于数据共享的设备,用户可以通过TCP/IP协议访问数据 SAN 通过网络交换设备把存储设备和相关服务器连接起来,属于搭建一个网络服务来实现共享存储设备的存储空间 FC-SAN 是用光纤设备组成的SAN,成本高,相连的所有设备都必须是支持光纤的网络设备,但性能高 IP-SAN 是用普通双绞线进行连接,性价比高,在距离不是很远的时候参用较多,但是距离长可能会有不少延迟
其中包含一个iscsi的技术(具体iscsi的配置查看我关于iscsi配置的相关blog)设备文件管理方法:udev 技术
因为连接ISCSI共享出的磁盘,其设备在系统的名字是按顺序分配的,不固定,导致在写一些自动挂载的时候会无故报错,所以想用udev技术让一个设备完全固定一个名字。
Linux查看系统中设备信息
1. 获取设备信息
动态监听系统设备信息
udevadm monitor --property具体查看当前系统设备的信息
获取路径
udevadm info -q path -n 设备的系统路径
获取详细信息
udevadm info -q all -p 刚刚查看的路径 -a
合并起来可以写成:
udevadm info -q all -n 设备的系统路径 -a2. 配置udev,修改配置文件:/etc/udev/rules.d/50-iscsidisk.rules
具体格式就算把所有的匹配选项和具体操作,用 , 连接起来,程序会把匹配所有匹配选项的设备一一进行所有操作,不过最好匹配项能锁定一个具体设备
符号含义 == 代表匹配 != 代表不匹配 = 代表赋值 += 代表追加 := 代表指定值,不允许被替换 变量 %k 内核所识别出来的设备名,如sdb1 %n 设备的内核编号,如sda3中的3 %p 设备路径,如/sys/block/sdb/sdb1 %% %符号本身 具体操作 NAME="名字" 定义设备名称 SYMLINK+="相对路径" 添加一个链接,其相对路径是从/dev/ 开始的 OWNER="用户" 指定设备的所有者 MODE="0644" 定义设备的权限其数字代表的就是权限 从上面的命令udevadm中,查找有用信息 ACTIOMN=="设备动作" 判断设备的动作(添加add,删除delete) SUBSYSTEM=="block" 设备类型是 块设备 ATTR{size}=="104857600" 设备大小 ATTRS{model}=="db " 设备命名
KERNEL=="sd[a-z][1-7]" 判断内核中该设备名字可以用范围也可是确定值
是磁盘就不加数字,是分区就要加上数字
ATTRS{vendor}=="LIO-ORG " 生产厂家 例如:
SUBSYSTEM=="block",ATTRS{model}=="db",ATTRS{vendor}=="LIO-ORG ",KERNEL=="sd[a-z]",SYMLINK="iscsi/udisk"
先手动进行连接iscsi的设备,然后查看其设备信息,然后在配置文件写一些关于磁盘的具体标识,可以是磁盘的标识也可以是磁盘的标识,选的什么的信息到时候,创建的连接就是谁,最后加一个链接,这样就可以在/dev/下创建一个链接,然后不管是挂载还是格式化都只要对这个链接操作。
要注意,如果想做的是一个磁盘,可以对其分区,但是最好不要格式化,否则会让分分区信息消失,可以分区后,再像上面再配置文件中写一个分区的链接。为提高稳定性,搭建多路径服务
装包:device-mapper-multipath
初始化配置:mpathconf --user_friendly_names n
进阶配置:
获取磁盘的唯一标示wwid:/usr/lib/udev/scsi_id --whitelisted --device=磁盘
修改配置文件: /etc/multipath.conf (在后面追加)multipaths { multipath { wwid "刚刚查看的磁盘的wwid信息" alias 自定的名字(其会自动创建在/dev/mapper/) } }
启服务:systemctl restart multipathd
刷新多路径信息 multipath -rr
查看多路径信息 multipath -ll检查多路径的配置是否成功,查看/dev/mapper/有没有自定义的名字,我们如果要分区、格式化、挂载也是对这目录下创建出来的内容操作,分区后,这个目录下也会有相关的文件
如定义的名字为mapth,那么磁盘就是/dev/mapper/mapth,分区后就会多一个/dev/mapper/mapth1,然后的操作就和基本的磁盘一样了。总结:
1. iscsi是较为常见的磁盘存储共享,请熟练掌握
2. udev和multipaths都是创建了一个链接,然后通过链接来操作磁盘
3. udev分区后不会有分分区相关的链接,但是multipaths会自动创建,其操作相对udev会检点点。 -
linux suse 共享目录_SUSE环境下YAST源(连接共享目录)
2020-12-21 22:28:30很多台SUSE11版本的服务器都需要安装net-snmp包,我不想一个劲地插拔光盘,于是想办法写了这篇短文背景说明:实际情况是,有很多台suse11版本的服务器都需要安装net-snmp包,suse下的Yast服务可以解决包之间的依赖... -
Liunx安装并配置multipath多路径,并为oracle asm磁盘组配置权限和规则
2018-10-16 16:11:57在生产环境中,Oracle RAC的搭建需要有共享存储的支持,而共享存储上的每个LUN挂载到服务器上通常是多条路径的,这样就需要在服务器上安装多路径软件来整合一个LUN的多条链路。有的存储厂商会有自己的多路径软件,但... -
修改PyTorch预训练模型的下载路径
2021-01-06 11:41:37PyTorch可以下载很多预训练好的神经...另外如果是多人共享的Linux服务器,每个用户都下载一遍这些训练好的神经网络明显是一种浪费。最好是放置在/var、/opt或者/usr/local等一类共享目录里。 但是默认情况下,PyTorch里 -
服务器对附件的处理
2011-03-31 10:33:401为什么不把图片放服务器 然后数据库存路径了1直接把图片放数据库 效率不高吧2好几台应用服务器呢。。2放在哪个服务器呢。专门的图片服务器又木有。。3现在一般都是存图片路径吧 2没有哪...5做共享52个linux虚拟... -
用TCP/IP进行网际互联 第三卷:客户-服务器编程与应用(Linux/POSIX套接字版)--详细书签版
2012-10-12 14:44:5715.4 面向连接的、多服务服务器的设计 128 15.5 并发的、面向连接的、多服务服务器 129 15.6 单线程的、多服务服务器的实现 129 15.7 从多服务服务器调用单独的程序 130 15.8 多服务、多协议设计 131 15.9 多... -
入门学习Linux常用必会60个命令实例详解doc/txt
2011-06-09 00:08:45如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:。 一般界面是这样的: Manddrake Linux release 9.1(Bamboo) for i586 renrel 2.4.21-0.13mdk on i686 / tty1 localhost login:root ... -
Linux常用的命令
2014-09-21 19:43:32usermod –G(g覆盖原组) grpup user改用户属于什么组(共享的组,即同时可以在多个组中) df 查看分区信息 sda 串口硬盘 —h 可读的 du 查看当前目录下的使用情况 fdisk –l 查看磁盘分区信息 mkfs 查看格式化的... -
linux教程——很使用的那种
2011-11-04 20:17:47当有多个选项时,可以写在一起。 ..表示当前目录的父目录,cd ..当中一定有个空格。 文件处理命令:ls 命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示当前或指定... -
git创建共享版本库-------多人开发
2016-12-10 23:54:28真实的git服务器的搭建需要使用Linux来进行搭建,搭建难度大且繁琐 2.将代码托管Github:必须开源,不想开源需要交钱 3.或者OSChina:免费,推荐国内速度快 4.一个U盘可以为共享版本库 5.一个文件可以作为共享版本库... -
Linux应用服务配置文档x_word打开一直有正在配置
2020-11-25 01:49:10定义说明文字,当一个客户端列出服务器的共享资源时,comment指令定义的文字将出现在共享名的旁边. 2.path 指定共享的路径.可以配合samba变量.分享资源的完整路径名称.除了路径要正确外,目录的权限也要设对.例如可以... -
[免费]2018年C++教程网的linux网络编程视频百度云下载链接.rar
2018-01-19 09:04:56讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ... -
LINUX操作系统(电子教案,参考答案)
2009-07-11 12:37:00Linux是一个多任务、多用户的操作系统,它以其良好的特性和资源的免费性而得到了蓬勃的发展。 本书通过大量的图示和实例,深入浅出的介绍了Linux的基本原理和应用。主要包括Linux的基本概念和操作,Linux的树型... -
Linux操作系统基础教程
2013-04-08 21:34:26它本身就是一个完整的 32 位的多用户多任务操作 系统,因此不需要先安装 DOS 或其他的操作系统(MS Windows, OS2, MINIX..)就可以进 行直接的安装。 Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux ... -
Linux网络编程 (第2版 )
2018-08-03 11:52:3411.3.5 一个多播例子的服务器端 313 11.3.6 一个多播例子的客户端 315 11.4 数据链路层访问 317 11.4.1 sock_packet类型 317 11.4.2 设置套接口以捕获链路帧的编程方法 317 11.4.3 从套接口读取链路帧的编程... -
C++教程网视频:linux网络编程
2018-05-15 08:27:11讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ... -
LINUX系统分析与高级编程技术
2010-09-17 22:56:092.3.22 查寻文件或命令的路径 2.3.23 比较文件或目录的内容 2.3.24 文件打印输出 2.3.25 一般文件的打印 2.3.26 troff文件的打印 2.3.27 打印机控制命令 2.3.28 进程控制 2.3.29 外壳变量 2.3.30 环境变量 2.3.31 ... -
C++教程网《Linux网络编程》视频百度云地址
2018-05-23 09:39:42讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ... -
linux网络编程-宋敬彬-part1
2014-03-03 16:11:342.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 搜索路径 43 2.3.6 自动推导规则 44 2.3.7 递归make 44 2.3.8 Makefile中的... -
LINUX系统分析与高级编程技术.rar
2009-05-20 18:26:302.3.22 查寻文件或命令的路径 14 2.3.23 比较文件或目录的内容 14 2.3.24 文件打印输出 14 2.3.25 一般文件的打印 14 2.3.26 troff 文件的打印 14 2.3.27 打印机控制命令 14 2.3.28 进程控制 15 2.3.29 外壳变量 16 ... -
linux 系统管理员.pdf 书籍
2012-02-13 11:02:455.14.4 验证域名服务器的设置 59 5.14.5 其他工具 61 第6章 串行链路网际协议 62 6.1 常规需求 62 6.2 SLIP的工作原理 62 6.3 dip的使用 63 6.4 运行于服务器模式 68 第7章 点到点协议 69 7.1 PPP打开 69 7.2 运行... -
cmd操作命令和linux命令大全收集
2012-04-24 11:58:23move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖 fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中... -
linux网路编程 中文 23M 版
2016-03-11 16:59:552.3.1 一个多文件的工程例子............................. ............. 34 2 . 3 . 2多文件工程的编译.............................................. 36 2.3.3 Makefile 的规则.................................. -
允许为每个Web添加多个UDP通知对象,每个判题服务器允许使用不同的UDP端口监听消息。阿里云+腾讯云测试通过。 01-23 更新 修订了Moodle集成代码,实现HUSTOJ给moodle系统作业自动判分。 01-20 更新 删除 noip ...
-
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...