
Linux
文章平均质量分 64
李亚超
自强不息,厚德载物;
专注于Deep Learning, Machine Translation, NLP;
喜欢写关于Linux C/C ,C#,算法,自然语言处理的技术博客,欢迎观临;
展开
-
Linux C 头文件使用简介
<br />1:unistd.h<br /> 包含许多Linux系统服务的函数,比如read(),write(),getpid().原创 2010-11-29 11:56:00 · 1225 阅读 · 0 评论 -
在Linux下编译Google leveldb数据库及在C++中操作示例
1:简介 Leveldb是一个google实现的非常高效的kv数据库,可按照字符串键值顺序映射进行存贮。目前的版本1.2能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能。 Leveldb是一个C++库,可用于很多情况。比原创 2011-08-07 19:16:14 · 14812 阅读 · 18 评论 -
Linux下读取UTF-8文本文件
开始我以在Linux为读取UTF-8的文本会很麻烦的,因为这不是普通的ANSI编码文件。所以开始看了很多资料,没想到,用普通的方法竟然读取出来了。并且读写和普通的纯文本文件一样,也没有像Windows下的头文件标志。 哎,Unicode编码人的智慧啊,要不在Linux下,所有的命令都要重写了。 我们IT民工啥时候可以达到这种程序啊。原创 2011-06-22 22:30:00 · 3948 阅读 · 0 评论 -
Linux Unicode 编程---如何(在程序中)加入并使用 Unicode 以实现外语支持
From:http://www.ibm.com/developerworks/cn/linux/i18n/unicode/linuni/Unicode 并不只是一个编程工具,它还是一个政治的、经济的工具。没有结合世界的语言支持的应用程序通常只能被那些能读写 ASCII 所支持语言的个人使用。这使得建立在 ASCII 基础之上的计算机技术脱离了世界上大部分人。Unicode 允许程序使用世界转载 2011-06-15 07:58:00 · 1752 阅读 · 0 评论 -
Linux C 格式化输出时要注意的问题
<br />在Linux下提供了以下函数提供格式化输出,printf,fprintf,sprintf,snprintf。这些函数的头文件定义都是stdio.h。为标准的C库函数。<br /> printf提供标准的输出流,fprintf往特定的流中写数据。前者比较常见,用的也较多。<br /> sprintf格式化输入到字符指针缓冲,这个函数自动的加入null byte到缓冲,但是返回值不包括这个结束字节。<br /> 使用sprintf函数意缓冲溢出问题,用户要保证格式化数据原创 2011-04-09 20:34:00 · 2637 阅读 · 2 评论 -
Unix网络字节顺序及其判断
一 对于一个16字节的数据,比如0x0102,在内存中可以有两个方式来存贮。一种是0x0102,一种是0x0201,前者成为小段对其,后者成为大端对齐。 在网络编程中,需要考虑到网络数据的存储顺序问题,这是个很重要的问题。因为客户机的数据存储顺是不统一好的,比如Linux,Windows用的是小段对齐,BSD,AIX等Unix系统用的时大端对齐。如果要在不同容的许同上交换数据就必须考虑这个数据格式的问题。 在Linux/Unix中,通常的数据在堆中存储原创 2011-04-08 16:41:00 · 1749 阅读 · 0 评论 -
Linux 中 Kill -2 和 Kill -9 的区别
在Linux 中 用 Kill -2 和 Kill -9 都能够结束进程,他们之间的区别为:Kill -2 :功能类似于Ctrl + C 是程序在结束之前,能够保存相关数据,然后再推出。Kill -9 :直接强制结束程序。原创 2016-12-09 20:27:50 · 8782 阅读 · 0 评论 -
Unix进程控制之4---避免产生僵死进程
<br />在前一部分提到了僵死进程的概念,如果我们写一个进程,这个进程fork了一个新的子进程。而,我们不想等待这个进程完全结束,不想在主程序结束时,这个子进程变成僵死进程。利用量词调用fork可以达到这一目标。<br />下面为一个例子,及解释:<br />#include<stdio.h>#include<sys/wait.h>int main(int argc, char **argv[]){ pid_t pid; printf("Main pid is %d./n",getpi原创 2011-02-21 20:27:00 · 1348 阅读 · 0 评论 -
C/C++面试题系列之3:输出1-N个数字
<br /> <br />题目:用C/C++计算1+2+3+……N<br />条件:<br />1.不使用任何循环语句。(for,while,goto等等)<br />2.不使用任何条件语句。(if,?:等等)<br />3.不使用*/等运算,只使用+-运算 <br />4:更不能写1000个printf或是cout。 <br /> <br />一看到这个题,人们会想到递归,但是递归需要结束条件,题目要去不要任何判断条件,所以不行。<br />例一:变相的用1000个printf<br />#include原创 2011-03-11 14:56:00 · 2296 阅读 · 0 评论 -
Unix进程控制之1---fork和vfork函数
<br /><br />一:fork函数<br />一个运行中的进程可以调用fork函数来产生一个新的进程,函数原型及头文件定义如下:<br />#include <unistd.h><br />pid_t fork(void);<br />Returns: 0 in child, process ID of child in parent, 1 on error<br /> <br />下面有几个细节性问题来说明:<br />1:普通的函数被调用时会有一次返回,fork函数会有两次返回。在进程中返回0,在原创 2011-02-19 21:13:00 · 1670 阅读 · 0 评论 -
Linux 线程同步之一:互斥锁
<br />在单线程条件下,由于对数据操作,在同样的时间下,只有一个线程来操作。所以不用担心数据的同步问题。现代的操作系统,大都提供并发机制,虽然有时候是表面的并发。在Linux中,并发用的最多的是基于线程的并发,进程的代价太高了,这样,一个共享的数据,在同一时间内,可能有多个线程在操作。如果没有同步机制,那么想要保证每个线程操作的正确性,是很困难的。<br />1互斥锁概念:<br />互斥锁提供一个可以在同一时间,只让一个线程访问临界资源的的操作接口。互斥锁(Mutex)是个提供线程同步的基本锁。让上锁原创 2011-03-04 12:11:00 · 16234 阅读 · 2 评论 -
Linux C/C++中”Segmentation fault“总结
<br /> 这几天需要对一个百万量级语料库进行统计,为了充分利用实验室的服务器优势,不得不换用Linux上的C++编程。以前经常用C#进行编程,C++也学过,但C++编程只是学习性质,之多写个简单的数据结构。这次真正做个统计遇到了很多问题。<br /> 由于数据量比较大,再读取过程中遇到了”Segmentation fault“错误。在此总结一下,希望对大家有所帮助<br /> 1:Linxu程序的结构<br /> 在Linux系统下,程序是个普通的可执行文件,用size原创 2010-11-10 22:34:00 · 5259 阅读 · 0 评论 -
Linux中"command not found" 解决办法
在Linux中不同的系统配置各异,即使同一种系统的不同版本也不完全一样。在日常操作中经常会遇到“无法找到命令”("command not found")。这样的问题。 根据Linux系统中,环境变量的概念,后来由看了/bin,/sbin等文件夹的内容,发现所有的Linux命令对应一个可执行程序,只是这些不同的程序根据不同的功能放在不同的文件夹里。用户输入命令,shell根据系统环境变量来搜索各个文件夹,如果找不到对应的可执行程序,就会显示“command原创 2010-11-07 17:17:00 · 15873 阅读 · 0 评论 -
RedHat 企业版5.4: 用命令行增加用户帐号
<br /> 昨天看到实验室有一台空闲机器,配置不太高,CPU奔腾 3GHZ,内存256M。对别人来说成了鸡肋,装XP吧,嫌配置太低;装Win7吧,那就更不用说了。刚好,我有一个红帽子的光盘,并且以后要用到这个系统,所以就安装了Redhat 5.4。作为我们组的共享服务器。装好以后,我就把机器放到一边,并且去掉了图形界面,只剩下命令行。因为这个机器是一组共享的,所以首先是分帐号问题,以下是命令行操作的步骤。<br /> <br />增加用户帐号:<br /> 1:要增加用户帐号原创 2010-11-07 16:50:00 · 3999 阅读 · 0 评论 -
清华申请退学博士作品:完全用Linux工作
<br />按: 尽管我们已经不习惯看长篇大论, 但我还是要说, 这是一篇值得你从头读到尾的长篇文章.<br />2005年9月22日,清华在读博士生王垠在水木社区BLOG上发表了《清华梦的粉碎--写给清华大学的退学申请》明确要求退学, 引起社会各界广泛争论. 他创作的长篇文章《完全用Linux工作》, 洋洋两万多字, 从不同角度居高临下的阐述了他眼中Linux完全优越于Windows的各种理由, 这篇文章并不简单的是一篇论述"Windows能做的事Linux都能做"这样的文章, 通篇洋溢着一个彻底批判 W转载 2010-12-16 22:26:00 · 1433 阅读 · 0 评论 -
Linux C 多线程执行顺序问题
<br />1:多线程设计通常是比较麻烦的,因为它牵涉到,线程间的同步、和执行顺序问题。在用户没有设定线程间的调度策略时,系统默认采取基于时间片轮转的调度策略。本实验是在默认的调度策略下,测试线程间的执行顺序问题。<br />本实验用的系统为Ubuntu10.04,Thread model: posix<br />gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) <br /><br />2 执行代码<br />#include<stdio.h>#include<pthr原创 2010-12-05 10:08:00 · 14355 阅读 · 10 评论 -
Linux C 系统数据类型简介
<br />1:void *<br /> void * 是一种能支持所有数据类型的指针,函数原型中常用的void * 为类属指针的一种。在使用时类属指针可以代替函数参数的其他指针,使一个函数能支持多种数据类型。<br />2:原始系统类型<br /> 以_t 结尾的类型为原始系统数据类型。目标位使系统数据结构咋不同的操作系统中,其字长不会有变化。原创 2010-11-29 12:05:00 · 1226 阅读 · 0 评论 -
Unix进程环境基本概念之---工作目录
在Unix或者是类Unix(Linux)系统中,每个进程都有“工作目录(working directory)”,有时候也成为“当前工作目录(current working directory)”。在由工作目录的参考下,产生了相对路径概念。 在程序共可以利用chdir函数来改变程序的工作目录。 在程序运行时工作目录是不能被删除的,所以在编写守候的服务进程是一般把当前的工作目录转移到一个特定的目录,比如/tmp。确保程序不会占用额外的目录,实质不能被删除。原创 2011-02-16 21:23:00 · 1438 阅读 · 0 评论 -
Unix进程环境之---进程结束的方式和退出函数
<br />1:进程结束方式<br />在Unix环境中,有8中方式可以结束一个进程,通常用的是以下五种方式:<br />1:从main函数返回<br />2:调用exit函数<br />3:调用_exit函数或者是_Exit函数<br />4:从最后一个线程中返回<br />5:从最后一个线程中调用pthread_exit<br />还有三种非正常的结束方式:<br />6:调用abort<br />7:接收到信号<br />8:应答最后一个线程的取消请求<br />后三种结束方式和线程有关,以后再讨论。原创 2011-02-17 11:42:00 · 2325 阅读 · 0 评论 -
Unix环境,文件读写锁
<br />1简介:<br /> 做个假设,如果有多个进程,共同编辑一个文件,那个这个文件安最后的结果是什么?在普通的Unix环境下,并没有限制多个进程共同读写一个文件。但是,如果这种情况出现在数据库中,怎么办。数据库要严格限制数据的一致性。<br /> 记录锁(Record locking)是用来描述一个进程限制其他进程来修改其在文件读写部位数据的概念。其实记录(Record)这个概念并不准确,因为在Unix下,任何文件只是字节流。<br /> 记录锁的实现方式有多种,早期的Berkel原创 2011-03-13 17:03:00 · 4573 阅读 · 0 评论 -
Unix环境写入文件时,要注意的一个小细节,要不任何情况都有可能发生
<br /> <br /> 在Unix/Linux环境下,写入文件时。如果,在open函数的读写模式,只提供了,读写、如果不存在生成,这些模式时。<br /> 如果源文件存在,以非追加的方式写入数据时,当后续的数据长度大于源文件已有的数据时,后续的文件覆盖以前的数据。<br /> 如果后续的数据长度小于源文件以后的数据长度时,只是覆盖了后续写入的数据长度。这时,文件的数据时,两者的混合,这不是我们想要的。<br /> 所以为了数据的正确性,在以非追加(append)方式吸入数据时,首先要清原创 2011-03-10 21:44:00 · 1843 阅读 · 1 评论 -
Unix环境,产生单实例进程方案
<br /> <br /> 在一些情况下,一个进程只能产生一个实例来执行。Unix环境,提供了文件-记录锁(file- and record-locking)机制,提供了事项单实例进程的基本解决方案。<br /> 假如,一个进程在开始运行时,生成了一个文件,并且,对整个文件上锁,并且,只有一个这样的写锁允许生成。<br /> 如果,后续的进程要试图产生写锁,会导致失败。这暗示了,前面已经有实例运行了。<br /> 下面一个判断是否有实例运行的方法。每个实例,都会试图生成一个文件(/v原创 2011-03-10 21:19:00 · 2602 阅读 · 0 评论 -
一个Linux守候进程例子
<br />其他程序可以调用void daemon_init(const char * cmd)方法,来初始化当前进程为守候进程<br /> #include<stdio.h>#include<unistd.h>#include<sys/resource.h>#include<fcntl.h>#include<signal.h>#include<syslog.h>void daemon_init(const char * cmd);int main(int argc, char原创 2011-03-10 19:32:00 · 1395 阅读 · 0 评论 -
Linux wait 函数实参为指针时,没有预期结果,原因及其解决办法
<br />在Linux/Unix中wait一般用在,用户主程序调用fork产生一个新的进程后,等待子进程执行完毕。在标准的Unix中wait的头文件定义为:<br />#include <sys/wait.h><br />pid_t wait(int *statloc);<br />在Linux中,定义为:<br />/*come from /usr/include/sys/wait.h<br /> Wait for a child to die. When one does, put its stat原创 2011-02-21 15:52:00 · 1631 阅读 · 1 评论 -
Unix进程控制之3---wait函数系列
<br />如果一个进程结束了,不论是正常的还是非正常的,内核都会通过发送SIGCHLD信号给父进程。子进程的结束是个异步事件,父进程执行这个信号,通过内核的异步通知。<br />父进程通过调用wait和waitpid可以1:如果所有的子进程正在运行,父进程阻塞。2:如果一个子进程结束了,父进程通过wait取得了结束进程的状态值,父进程会立即随着子进程的结束状态返回。3:如果进程没有子进程那么返回error。<br />wait和waitpid的函数原型及头文件定义<br />#include <sys/w原创 2011-02-21 17:41:00 · 2305 阅读 · 0 评论 -
Unix进程控制之2---exit进程退出函数
<br /><br />一:进程退出函数详解<br />在前一篇的Unix进程环境之---进程结束的方式和退出函数中提到了Unix程序退出的八中方式,分别为:<br />1:从 main 函数返回<br />2:调用 exit 函数<br />3:调用 _exit 函数或者是 _Exit 函数<br />4:从最后一个线程中返回<br />5:从最后一个线程中调用 pthread_exit<br />还有三种非正常的结束方式:<br />6:调用 abort<br />7:接收到信号<br />8:应答最后原创 2011-02-20 21:29:00 · 2695 阅读 · 2 评论 -
Unix进程环境之3---进程环境列表
<br /><br />1:进程环境<br />简介当一个进程(proecss)调用另一个程序(program)时,同时会传递这个程序执行的环境列表(environment list)。<br />进程环境列表是一个字符指针数组,每个字符指针是一个以空字符(null-terminated)结束的C字符串。<br />字符指针数组地址包含在全局变量environ里。如下:<br />extern char **environ;<br />加入环境包含五个字符串,则表示为以下图示:<br /><br />通常环原创 2011-02-17 16:50:00 · 1353 阅读 · 0 评论 -
Tensorflow 错误信息记录
>>> import tensorflow as tfTraceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 2...原创 2018-06-17 20:50:11 · 1530 阅读 · 0 评论