
Unix编程
文章平均质量分 67
iwi_ac
爱生活 爱思考 爱编程 希望和志同道合的朋友一起交流!
ACmer Linuxer
展开
-
TCP/IP详解--拥塞控制 & 慢启动 快恢复 拥塞避免
TCP的拥塞控制1. 拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。 拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有转载 2016-10-09 15:47:43 · 444 阅读 · 0 评论 -
进程间通信-命名管道FIFO
命名管道概述如果我们要在不相关的进程间交换数据,那么使用FIFO文件将会十分方便。FIFO文件通常也称为命名管道(named pipe)。命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式存在。创建命名管道创建命名管道一般有两种方式:命令行方式一个比较旧的方式是:mknod filename p这个命令并未出现在X/Ope转载 2016-04-12 14:48:00 · 595 阅读 · 0 评论 -
linux下 fork(),vfork(),clone()的用法及区别
fork,vfork,clone都是linux的系统调用,用来创建子进程的(确切说vfork创造出来的是线程)。先介绍下进程必须的4要点:a.要有一段程序供该进程运行,就像一场戏剧要有一个剧本一样。该程序是可以被多个进程共享的,多场戏剧用一个剧本一样。b.有起码的私有财产,就是进程专用的系统堆栈空间。c.有“户口”,既操作系统所说的进程控制块,在linux中具体实现是task_structd.有独立转载 2016-03-15 16:21:31 · 364 阅读 · 0 评论 -
C语言文件读写操作中缓冲区问题和setbuf函数详解
清除和设置文件缓冲区(1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容,常用于写完一些数据后,立即用该函数清除缓冲区,以免误操作时,破坏原来的数据。 flushall()将清除所有打开文件所对应的文件缓冲区。(2).设置文件缓冲区函数 void setbu转载 2016-03-14 21:24:41 · 1330 阅读 · 0 评论 -
【C/C++】Linux下使用system()函数一定要谨慎
曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须要搞懂system()函数,因为还是有很多人用了system()函数,有时你不得不面对它转载 2016-03-14 20:31:04 · 757 阅读 · 0 评论 -
信号
信号: 通常将软件中断称之为信号。在很多大型应用中都会运用到信号(signal)信号作用:提供了一个处理异步事件的方法:如终端用户键入中断键,会通过信号机制停止一个程序,或者及早的终止管道中的下一个程序原创 2016-03-24 21:40:41 · 377 阅读 · 0 评论 -
多线程id为什么是负的?原因
/******************************************************************************************************************原文地址:http://www.programfan.com/CLUB/showpost.asp?id=985说明:为什么线程ID是负的?。***转载 2016-04-06 19:58:06 · 2685 阅读 · 0 评论 -
linux wait函数
#include #include pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,a.如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;b.如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。参数status转载 2016-03-13 21:46:16 · 608 阅读 · 0 评论 -
fflush函数作用浅析
一、fflush函数:更新缓存区头文件:#include 函数定义:int fflush(FILE *stream);函数说明:fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中. 如果参数stream 为NULL,fflush()会将所有打开的文件数据更新.二、fflush(stdin):刷新缓冲区把缓冲里面的东西丢掉fflush(stdou原创 2016-02-27 21:56:24 · 19264 阅读 · 1 评论 -
与原子操作相关的 volatile 和 sig_atmotic_t
1).volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,每次使用时都需要去内存里重新读取它的值,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int转载 2016-03-22 16:40:29 · 906 阅读 · 0 评论 -
编译错误stray ‘\343’ in program解决办法
小二今天写远程控制数据代码时候遇到了stray ‘\343’ in program MYSQL_ROW sqlrow;调了一段时间 发现代码一点问题没有就是不知道问题在哪于是我把MYSQL_ROW sqlrow;重新敲了一遍 一番推敲发现了问题的所在这种错误是由于代码中含有中文的引号or其他的全脚符号引起的,而小编遇到的是由中文空格引起的,不易发现通过命令 cat原创 2016-04-02 14:35:56 · 19007 阅读 · 0 评论 -
mysql_store_result和mysql_use_result
同:两者均是连接外部程序处理参数,并返回结果集。异:从服务器上检索结果集的行,前者只是启动一个逐行的检索,后者从服务器检索结果集的时候就提取了行,并且为之分配内存,存储到客户机中。操作处理:mysql_store_result:获取全部数据集保存到本机,因此在随后的mysql_fetch_row()就再也不会返回错误,当返回NULL的时候表示已经到达数据集的末端。m转载 2016-04-01 21:52:51 · 2843 阅读 · 0 评论 -
c语言操作mysql
用c语言连接MYSQL数据库包含两个步骤:1.初始化一个链接句柄结构;2.实际进行连接//mysql_real_connect(...);首先,使用mysql_init来初始化连接句柄:#includeMYSQL *mysql_init(MYSQL *);通常你传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针。如果你传递一个已有的结构,它将被重新初转载 2016-04-01 21:28:35 · 545 阅读 · 0 评论 -
chmod 与fchmod函数
#include int chmod(const char *pathname, mode_t mode);int fchmod(int filedes, mode_t mode);fchmod()会依参数mode权限来更改参数fildes所指文件的权限。参数fildes为已打开文件的文件描述词。参数mode请参考chmod()。权限改变成功则返回0,失败返回-1,原创 2016-03-08 15:44:06 · 2806 阅读 · 0 评论 -
文本文件与二进制的区别
突然想起了这个基础性的问题,自己一直对它的区别不是很清楚,于是今天上午研究下了,分享下自己的理解。(对它很清楚的同学们可以略过此篇文章)大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是转载 2016-03-08 21:29:33 · 1166 阅读 · 0 评论 -
关于64位CentOS上ptrace报<linux/user.h> no such file 错误的解决方法
首先介绍一下ptrace:ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。使用ptrace,你可以在用户层拦截和修改系统调用(sys call)我们以一个实例为例:[cpp] view plain copy print?#include转载 2016-04-13 20:29:29 · 4417 阅读 · 0 评论 -
无缓冲I/O与有缓冲I/O区别
无缓冲I/O :不是内核不提供缓冲,而是对于用户层来说,没有提供缓存,而对内核来说还是有缓存的数据:数据流->内核缓存->磁盘有缓冲I/O:是指在用户层上再建立了一层缓存区(流缓存区),目的是为了减少read,write等系统调用的使用次数,降低系统开销。数据:数据流->流缓存区->内核缓存->磁盘e.g当用fwrite函数网磁盘写数据时,先把数据写入流缓冲区中,当达到一定原创 2016-04-14 19:58:13 · 2780 阅读 · 1 评论 -
Linux中tty、pty、pts的概念区别
基本概念:1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。2> pty(虚拟终端):但是如果我们远程telnet转载 2016-04-14 20:08:26 · 589 阅读 · 0 评论 -
Git常用命令
Git 常用命令git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 .git 文件夹,.git 文件夹里存储了所有的版本信息、标记等内容git remote add origin git@github.com:winter1991/helloworld.git转载 2016-08-10 22:45:44 · 475 阅读 · 0 评论 -
(void) (&_x == &_y)
【整理】min()的宏定义中的(void) (&_x == &_y)的含义转自:http://hi.baidu.com/serial_story/blog/item/b6fd81098b5b1b296a60fb4d.html近日无意间发现,关于常见的min的宏定义,在Linux中是这样的:/** min()/max()/clamp() macros that a转载 2016-08-04 11:32:02 · 561 阅读 · 0 评论 -
前后台进程的本质区别
问题:linux 前台进程,后台进程有什么本质的区别虽然,很多人都说 在命令后加个&就是把该进程转到后台去,然后,前台还能做其他事情,但是,我觉得这是表面形象,其两者有什么本质区别呢?你所谓的“后台进程”应该叫做 守护进程(daemon),init就是特殊的守护进程,PID为1。 Linux启动时vmlinux内核加载initrd.img(ram disk)转载 2016-08-15 16:37:27 · 2305 阅读 · 1 评论 -
[原创]Linux系统启动过程分析
分类: LINUX经过对Linux系统有了一定了解和熟悉后,想对其更深层次的东西做进一步探究。这当中就包括系统的启动流程、文件系统的组成结构、基于动态库和静态库的程序在执行时的异同、协议栈的架构和原理、驱动程序的机制等等。 本人在综合了现有网上大家智慧的基础上,结合对2.6.32的内核代码的研读,基于CentOS 6.0系统对Linux的启动流程做了些分转载 2016-07-07 22:22:17 · 355 阅读 · 0 评论 -
sort基础
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序。参 数: -b 忽略每行前面开始出的空格字符。 -c 检查文件是否已经按照顺序排序。 -f 排序时,忽略大小写字母。 -M 将前面3个字母依照月份的缩写转载 2016-07-06 18:29:31 · 281 阅读 · 0 评论 -
linux fdisk运用
fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段 我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了;通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是/dev/hda ,另一个是/dev/sda ; fdisk 操作硬盘的命令格式如下: [root@localhost beinan转载 2016-07-06 18:12:26 · 582 阅读 · 0 评论 -
用户与系统(unix)
时钟时间:就是一个进程从开始运行到结束运行后,你的时钟走过了多少时间,这其中包含了进程在阻塞和等待状态的时间。用户CPU时间:就是用户的进程获得了CPU资源以后,在用户态执行的时间。系统CPU时间:用户进程获得了CPU资源以后,在内核态的执行时间。用户cpu: 代码所占用的cpu(nt a,int b)系统cpu:系统调用所占用的cpu原创 2016-05-19 21:17:09 · 435 阅读 · 0 评论 -
文件读写: 二进制方式和文本方式的区别
首先要明白一点,就是无论你用哪种语言进行程序设计,也无论你用哪个函数进行文件操作(库函数也好,直接操作系统API也好),最终的文件打开的操作都是由操作系统来进行的,因此各种语言的情况从本质上来说都是相同的。 用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同(或者说和磁盘上的内容完全相同)。 但是如果用了文本模式,那么操作系统在将文件内转载 2016-05-19 20:57:28 · 899 阅读 · 0 评论 -
openat函数用法示例
//http://m.blog.youkuaiyun.com/article/details?id=47796173《Unix环境高级编程》的第三章和第四章出现了大量的以at结尾的函数,如openat、fstatat等,书中只是粗略的说明了下,没有实际的例子让人很难懂。int openat(int dirfd, const char *pathname, int flags, mode_t转载 2016-05-17 21:11:20 · 4127 阅读 · 0 评论 -
ftok函数用法
系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:key_t ftok( char * fname, int id )fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。当成功执行的时候,一个key_t值将会被返回,否则 -转载 2016-05-28 17:36:50 · 4876 阅读 · 0 评论 -
ftok函数(file to key)
统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:key_t ftok( char * fname, int id )fname就时你指定的文件名,id是子序号。在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进制转载 2016-05-28 17:22:02 · 770 阅读 · 0 评论 -
总结之Unix的基础知识
1.1操作系统:从严格意义上讲,可以讲操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行的环境。我们通常将这种软件称为内核(kernel)OS提供的典型服务:1.执行新程序2.打开文件3.读取文件4,分配存储区5.以及获取当前时间1.2UNIX体系结构内核的接口:称之为系统调用(system call)内核-->系统调用-->shell,公共函数库-->应用程序;公共函原创 2016-04-17 21:42:28 · 476 阅读 · 0 评论 -
对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
原文地址:http://blog.youkuaiyun.com/xiaoxi2xin/article/details/5524769在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.他们的区别:转载 2016-04-11 20:19:04 · 10795 阅读 · 0 评论 -
SSH与FTP之间的关系与区别
SSH 为建立在应用层和传输层基础上的安全协议,SSH采用面向连接的TCP协议传输 应用22号端口,安全系数较高。FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。TCP/IP协议中,FTP占用两个端口,FTP标准命令TCP端口号为21,Port方式数据端口一般为20。虽然FTP在控制连接方面可以通过SSL加密,但是FTP在通过原创 2016-04-14 20:12:16 · 7559 阅读 · 0 评论 -
关于<signal.h>中SIG_ERR、SIG_DEL、SIG_IGN定义的问题
关于中SIG_ERR、SIG_DEL、SIG_IGN定义的问题linux中signal.h中对对signal的定义是:void (*signal(int signo,void (*func)(int)))(int);通过typedef可以转换成这样:typedef void Sigfunc(int);Sigfunc *signal(int,Sigfunc *);转载 2016-03-20 15:05:44 · 2811 阅读 · 0 评论 -
linux 信号阻塞和信号未决
信号的“未决”是一种状态,指的是从信号的产生到信号被处理前的这一段时间;信号的“阻塞”是一个开关动作,指的是阻止信号被处理,但不是阻止信 号产生。信号的阻塞就是让系统暂时保留信号留待以后发送。由于另外有办法让系统忽略信号,所以一般情况下信号的阻塞只是暂时的,只是为了 防止信号打断敏感的操作。* 当你需要修改某些全局变量时,你可以通过sigprocmask()函数阻塞处理函数中也使用转载 2016-03-20 14:52:44 · 3794 阅读 · 1 评论 -
添加mysql.h头文件
如何使用c语言来操作数据库,需要一下几个步骤:第一:安装mysql;第二:sudo apt-get install libmysqlclient15 -dev 安装此软件包,然后在/usr/include/mysql里可以找到mysql.h 第三:使用emacs 将下面代码复制#include #include main() { MYSQL *co原创 2016-03-29 20:30:12 · 21508 阅读 · 0 评论 -
回显是什么鬼?浅谈
linux c 里面出现了一个叫做tcgetattr 和tcsetattr的两个函数 他们的功能能是获取回显位 以及设置回显位详解http://blog.chinaunix.net/uid-10747583-id-97303.html那么什么是回显?你在键盘上按下一个“键”,如果在电脑上同时显示出你按的内容,这就是回显;如果没有显示,就不回显。典型的两个原创 2016-01-25 15:19:01 · 11443 阅读 · 2 评论 -
Linux c中一些常用函数总结(c语言中文网。。。)
fgets() fputs() read() Write() creat()fread 和fwrite函数 fopen() Opendir open() rmdir link ulink rename()...原创 2016-01-25 14:45:14 · 2200 阅读 · 0 评论 -
位操作,置位,清零
很久没有用到位相关的东东了,现在来回顾一下如何将一个变量的某位置位或清零。#define SetBit(x, y) (x |= 1 #define ClearBit(x, y) (x &= ~(1 这里要注意的是位或'|' 位与'&' 与逻辑或'||' 逻辑与'&&'的区别。前者是针对变量的每一位,后者是针对整个变量,即真与假。 如转载 2016-01-25 14:37:06 · 7909 阅读 · 0 评论 -
linux c 与时间有关的time函数
struct tm { int tm_sec; /* 秒–取值区间为[0,59] */ int tm_min; /* 分 - 取值区间为[0,59] */ int tm_hour; /* 时 - 取值区间为[0,23] */ int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */ int tm_mon; /* 月份(原创 2015-12-23 17:29:55 · 9229 阅读 · 0 评论 -
lseek函数的用法
所有打开的文件都有一个当前文件偏移量(current file offset),以下简称为 cfo。cfo 通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数。读写操作通常开始于 cfo,并且使 cfo 增大,增量为读写的字节数。文件被打开时,cfo 会被初始化为 0,除非使用了O_APPEND 。 使用 lseek 函数可以改变文件的 cfo 。 #in转载 2015-11-28 14:32:02 · 9986 阅读 · 0 评论