接上一章,在进行了进程最后部分的学习后,现将进程最后部分的知识进行总结学习 同时会附上进行my_shell项目文档实现的经验 * 一,进程的其他操作* 本部分是一些进程的其他操作,虽然不如进程操作的部分重要,但是还是有很重要的意义 1.获取进程ID 进程ID,是进程的标识之一,进程ID(即PID)的重要性不言而喻 而且,通过进程ID,方便对进程进行其他的操作 #incldue<unistd.h> #incldue<sys/types.h> pid_t getpid(void) //获取当前进程ID pid_t getppid(void) //获取当前进程父进程ID 另外还有获取进程实际用户,有效用户的函数,在之前已经提到过,此处不再赘述 2.setuid与setgid 看过<鸟哥的Linux私房菜>的同学,可能对这两个概念了解的比较好一点 简而言之,这两个函数,使用来处理程序中对用户权限的处理问题 #include<sys/types.h> #include&l 继续阅读 >>


陈森 17/07/31 22:53:55
Description 整天待在方块里的骑士感到特别的无聊,于是他决定来一场说走就走的旅行。 然而他只能走日字,如右图所示,如果骑士当前在棋盘的正中央,他可以走标记有白点的八个区域。 骑士知道世界是一个列数和行数均不超过8(即8×8)的棋盘。 并且骑士有一点强迫症,如果用A-Z来表示列,1-99来表示横行,他只愿意走字典序最小的一条道路。 你能帮助勇敢的骑士制定一个适合他的旅行计划,使得他可以走遍整个棋盘吗?骑士可以在任一方块出发或者结束。 Input 第一行中有一个正整数n,代表数据有n组。 对于每组数据,都含有两个正整数p和q(1 <= p * q <= 26),代表棋盘有p行q列。 Output 每组数据首先应当输出”Scenario #i:”,i代表输出的是第i组数据的结果。 然后在一行之内输出一条可以走遍棋盘的路径,如果有多条路径可以走遍棋盘,那么输出按字典序排序第一的路径。 最后,留一个空行。若现在是最后一条数据,则不留空行。 在输出路径时,用A代表第一列,B代表第二列..以此类推。而使用1代表第一行,2代 继续阅读 >>


陈文浩 17/07/31 22:48:19
Hive是什么 Hive是一个基于Hadoop文件系统的数据仓库,提供了对数据进行ETL(抽取,转换,加载)的工具、数据存储管理和大型数据集的查询分析能力。Hive提供了类SQL语言-HiveQL,可使用关系数据库提供的的SQL语句来操作Hive。 Hive擅长做什么? Hive擅长在不变的、大规模的数据集上执行的批量操作。 Hive具有良好的扩展性,因为其建立在HDFS上,可自动适应机器数目和数据量的动态变化,并具有良好的容错性。 Hive具有良好的可延展性,由于Hive基于MapReduce,可通过内置的Mapper和Reducer来执行数据分析操作,同时也允许熟悉MapReduce编程框架的用户使用Hive提供的编程接口实现自己的Mapper和Reducer来处理内置的Mapper和Reducer无法完成的复杂数据分析工作。 Hive不擅长做什么? Hive不提供排序和查询cache功能 不提供在线事物处理功能 不提供实时的查询和记录级的更新功能 Hive数据存储 Hive的存储是建立在Hadoop的文件系统之上的,没有 继续阅读 >>


周攀 17/07/31 21:54:07
按网络的作用范围对网络分类? 局域网 城域网 广域网 因特网发展史 第一阶段:ARPANET的创建 第二阶段:三级结构因特网的建成 第三阶段:形成了多层次的ISP结构的因特网 因特网的组成 边缘部分:由所有链接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享 核心部分:由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换) 因特网边缘部分端系统之间的通讯方式 客户服务器方式和对等方式 客户服务器方式在因特网上是最常用的,也是最传统的方式。客户服务器模式是一种分布式系统体系结构。客户(client)和服务器(server)都是指通信中所涉及的两个应用程序。客户服务器方式描述的是进程之间服务和被服务的关系。这里所说的客户和服务器都指的是计算机进程(软件)。在C/S方式中,请求一方为客户,响应请求一方称为服务器,如果一个服务器在响应客户请求时不能单独完成任务,还可能向其他服务器发出请求,这时,发出请求的服务 继续阅读 >>


贺含悦 17/07/31 21:53:15
I/O复用——select与poll 1. select (1). 作用: 在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常事件。 (2). 函数原型: int select (int nfds,fd_set* readfds,fd_set* writefds,fd_set * exceptfds,struct timeval* timeout) <1>. nfds:指定被监听的文件描述符的总数。它通常被设置为select监听的所有文件描述符的最大值加1。 <2>. reafds、 writefds、exceptfds:分别指向可读,可写和异常等事件对应的文件描述符集合,内核通过修改它们来通知应用程序哪些文件描述符已经就绪。这三个参数是fd_set结构体指针类型。可以使用下列宏来访问fd_set结构体: - FD_ZERO(fd_set * fdset) /*清除fdset的所有位*/ - FD_SET(int fd,fd_set *fdset) /*设置fdset的位f 继续阅读 >>


梁梦迪 17/07/31 17:24:58
  首先找到你需要的字体,比如我就是从 windows 系统里拷出来的,C:\WINDOWS\Fonts 这里有很多字体,我只拷贝了simhei.ttf 和 simsun.ttc。   安装 Java 后,在 Java 的安装目录 /usr/local/jdk1.6.0_45/jre/lib/fonts/ 可以看到很多字体,在这里新建个目录,名字叫 fallback(就用这个名字吧,据说 ubuntu 找不到设定的字体的时候就到这个目录里找字体), 并且把你需要的字体拷贝到这个目录。 $mkdir fallback $sudo cp ./your font dir/simhei.ttf fallback/ $sudo cp ./your font dir/simsun.ttc fallback/   接下来要注意了,很多资料并没有说明这一点,那就是字体文件的权限,一定要可读!我就是这里没注意,结果折腾了好多天,最后才发现。 $cd fallback/ $sudo chmod 644 simhei.ttf $sudo chmod 644 simsun 继续阅读 >>


何攀 17/07/31 16:57:31
1. 新版MySQL修改密码的四种方法: (1) 直接设置法: # test为用户名,password后面是新密码,回车后输入旧密码即可 [root@pavilion 15:09 hp]# mysqadmin -u test -p password Csdn123456. (2) 利用SQL语句: # 登录mysql,执行如下sql语句,括号内为新密码 mysql> set password=PASSWORD('Csdn693640.'); (3) 使用 mysql_secure_installation 命令修改root密码 [root@pavilion 15:50 hp]# /usr/bin/mysql_secure_installation (4) 修改 user 表 authentication_string 字段 # 登录mysql,执行如下sql语句,括号内为新密码 mysql> use mysql mysql> update user set authentication_string=pas 继续阅读 >>


何攀 17/07/31 16:46:12
转自:http://chino.taipei/note-2016-0311C-%E7%9A%84%E8%BC%B8%E5%87%BA%E5%85%A5cin-cout%E5%92%8Cscanf-printf%E8%AA%B0%E6%AF%94%E8%BC%83%E5%BF%AB%EF%BC%9F/ 有打竞赛或经常刷题的人,一定有遇过用cin/cout结果TLE,换成scanf/printf就AC的情况。 难道cin/cout真的比较慢吗?为什么C++要做出一个比C还要更慢的输入输出介面呢? 我们来看看cin/cout的效率到底怎么样。 以下都是个人的观察,有错的话请留言告知QAQ,本人很废还请鞭小力一点。 开始前,cin/cout是什么? 首先,我们先来看一下cin/cout和scanf/printf的差别,前者是物件,后者是函数。 函数很简单,就是定义一个函数,然后他会把里面出现%的地方取代掉,而物件则是重载了shift运算子<<,>>,其实真的很直观,就丢进cout跟从cin拿出来嘛~,而且也不用管型别,因为编译器会 继续阅读 >>


殷健翔 17/07/31 14:26:20
dup 和 dup2 都可以用来复制一个现存的文件描述符。经常用来重新定向进程的 STDIN,STDOUT,STDERR #include<unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 这两个函数我们可以用来复制文件描述符。 其中oldfd和newfd分别是复制前的文件描述符和复制后的文件描述符。 这两个函数的调用都复制文件描述符oldfd,且返回值都为新的文件描述符。 不同点是:dup()的返回值是最小的未用文件描述符;dup2()的返回值是预先指定的文件描述符newfd。 对于dup2(),如果文件描述符newfd正在被使用,则先关闭newfd;如果newfd同oldfd,则不关闭该文件正常返回。 了解一下文件描述符在内核中的形态. 一个进程在存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2) 0与进程的标准输入相关联 1与进程的标准输出相关联 2与进程的标准错误输出相关 继续阅读 >>


贺含悦 17/07/31 11:43:30
线程同步 1.互斥锁 同一个时刻只允许一个线程执行一段关键代码,防止发生读写错乱。 锁的初始化(使用互斥锁之前必须先初始化) 1.将宏(PTHREAD_MUTEX_INITIALIZER)赋给锁(pthread_mutex_t mlock) 2.使用 pthread_mutex_init 函数 int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); 参数restrict attr表示互斥锁的属性,NULL 为默认属性 。 加锁与解锁 #include <pthread.h> int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthr 继续阅读 >>


刘生玺 17/07/31 11:12:51