第三章 文件I/O 第四章 文件和目录 第三章 文件I/O open(const char *pathname, int oflag, .../*mode_t mode*/) oflag除了熟悉的O_CREATE, O_RDONLY, O_WRONLY, O_RDWR外, 还有 O_APPEND 追加 O_EXCL 如果存在就会报错,不存在就创建,原子性操作 O_SYNC 保证数据一定落到硬盘上,但实际上很多系统并没有实现这个 O_TRUNC 成功打开后,且有写权限时,把长度截断到0 进程关闭时会自动关闭进程打开的所有fd. 可利用lseek来把cur位置往后移动,创建空洞文件,中间全为0. read和write是不带buff的,最优buff通常都是4096字节,即页大小. 文件的i节点中记录了文件的所有者,文件长度,文件所在的设备等,所以多个进程同时写一个文件时,相当于对i节点做原子操作. 由于历史原因,O_RDONLY,O_WRONLY并不是恰好不同的二进制位,所以要判断时必须 val & O_ACCMODE . int dup(fd) 用于从fd复制一个新的,并返回,等价
发表于 2018-04-23 08:41:48 | 条评论 | 阅读次数:14
我是谁,我在哪,这个月我干了啥。。 scala和spark 安装scala和配置sbt scala语法 scala spark elasticsearch-hadoop spark-submit hadoop hdfs简单使用 java spring加载properties java语法 时间戳格式化 scala和spark 安装scala和配置sbt 进入idea,Preferences->Plugins->Scala,安装这个插件 创建工程的时候需要注意,选择正确的sbt版本和scala版本 配置里几个比较重要的文件: build.properties, plugins.sbt, build.sbt scala语法 scala这语言确实有点飘,可以和java混用,写起来比java快很多 // object相当于是static类,class就是普通的需要创建实例的类, 如果是class,里面是不能设置某个函数是静态的def main(args: Array[String]): Unit = { // Unit表示void类型 val inputF
发表于 2017-12-24 14:32:24 | 条评论 | 阅读次数:66
protoc安装 https://github.com/google/protobuf clone一份下来,然后 sudo apt-get install autoconf automake libtool curl make g++ unzip 注意看下有没有漏掉某个依赖文件,这个挺蛋痛的。 之后执行目录中的 ./autogen.sh 之后就有configure了,然后安装,有点慢,稍微休息一下下 ./configuremakemake checksudo make installsudo ldconfig # refresh shared library cache. proto编译器就算安装好了。 我们可以来试试写个 test.proto syntax="proto3";package qwb;message Point { int32 x = 1; int32 y = 2;} 然后 protoc test.proto --python_out=. python的依赖文件安装 之后就能发现./目录里有test_pb2.py文件。 注意,protoc最好
发表于 2017-11-17 20:45:48 | 条评论 | 阅读次数:65
一键式环境配置 tmux 快捷键 复制模式 python 编译 新版本和旧版本之间的问题 vim 编译 配置 vim快捷键 vim的一些坑 centos6.5 配置源 glibc 系统区别 实用的包 mosh 编译 原理 YouCompleMe 参考 编译 一键式环境配置 https://github.com/qwb2333/shell_environ tmux 快捷键 [ 开启复制模式,按q或者esc退出 ] 粘贴 number 直接切换到具体的tab c 创建新的tab % 横向分栏 “ 纵向分栏 q 选择分栏具体编号 Left Right Up Down 切换分栏 s 查看session情况,并切换 z 最大化,或者还原 :kill-pane 用来杀掉死了的 :kill -window :rename 修改这个session的名字 : rename-window 修改window的名字 下面这些命令是直接这终端里的 tmux new -s qwb 创建一个新的session tmux attach -t qwb 切换到qwb的sessi
vim
发表于 2017-11-16 00:57:22 | 条评论 | 阅读次数:363
目标:A电脑连接B电脑无需密码 第一步:生成私钥/公玥对 ssh-keygen -t rsa -P '' ssh连接是默认开启通过公钥和私钥这种连接方式连接的。 ‘’里面是私钥的密码,用于使用私钥时的二次验证,我们目的是不输入任何密码,所以这里留空。 默认生成的公钥地址为.~ssh/id_rsa.pub,默认生成的私钥地址为~ssh/id_rsa 私钥应存在A电脑中,然后我们把公钥复制到B电脑里去,如放到~/id_rsa.pub 第二步:修改权限, 添加私钥 这一步非常的重要,否则会一直失败。 保证两台电脑的.ssh的权限为700,A电脑中的私钥为600 A电脑使用命令 ssh-add ~/.ssh/id_rsa 把私钥添加到ssh中 第三步:配置B电脑的公钥 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 即在authorized_keys中追加这次的公钥 第四步:连接 A电脑直接ssh B电脑,如果前面的配置正确,就能做到无密码登录。 如果之前第一步的-P中填了二次验证的密码,只需要输入二次验证的密码,就能登录。
发表于 2017-11-02 14:09:56 | 条评论 | 阅读次数:65
上次被网易面试官怼的好惨,,决定认真学一下linux网络编程 详解 有用的结构体 有用的socket函数 有用的辅助函数 代码 socket tcp ipv4服务端代码 socket tcp ipv4客户端代码 详解 有用的结构体 TODO 有用的socket函数 TODO 有用的辅助函数 TODO 代码 socket tcp ipv4服务端代码 因为使用了pthread,所以编译时参数需要加-pthread cmake文件 cmake_minimum_required(VERSION 3.7)project(SocketServer)set(CMAKE_CXX_STANDARD 11)set(SOURCE_FILES main.cpp)set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")add_executable(SocketServer ${SOURCE_FILES}) #include <string>#include <string.h>#include
C++
发表于 2017-09-09 23:52:44 | 条评论 | 阅读次数:222
redis也提供事务,但是和传统的数据库有着一些区别。 事务 用MULTI开启事务,EXEC关闭事务。 redis的事务主要是保证命令要么执行,要么都不执行(原子性)。 其实就是把命令刚开始只是发送到远程,但是并没有运行,直到收到EXEC,把刚刚的所有命令都一次性运行。 在MULTI和EXEC中,如果过程中的代码出现了错误,将有2种可能的情况。 1.如果编译上的错误,那么所有命令都不会被执行。 2.如果是运行上的错误,那么除了错误的那条命令,其他所有命令都会被执行。 redis并没有提供回滚的函数。 通常可以考虑打日志,然后用业务来做到回滚。 所以我们可以发现,redis并不能太好的保证一致性,所以用redis来做强一致性的事情,本来就是非常不符合设计的! 乐观锁(WATCH) WATCH可以用来监视一个key。 监视之后,在之后出现的第一个事务中,如果这个key的值在这个事务外被修改了,那么执行EXEC时将失败。所以通常都会设置retry(注意这里redis没有自动回滚这套操作,所以可能要注意一点)。 其实WATCH就是一个乐观锁。在WATCH一个key时,会记录下这个key的版本号。 之后
发表于 2017-08-28 20:12:43 | 条评论 | 阅读次数:130
Copyright © 2017 - 2018 qwb's blog
blog.csustacm.com All Rights Reserved
Powered by qwb Contact me