
Unix环境高级编程
文章平均质量分 68
iwi_ac
爱生活 爱思考 爱编程 希望和志同道合的朋友一起交流!
ACmer Linuxer
展开
-
kill -9 杀不死的进程处理办法
kill -9发送SIGKILL信号将其终止,但是以下两种情况不起作用:a、该进程处于"Zombie"状态(使用ps命令返回defunct的进程)。此时进程已经释放所有资源,但还未得到其父进程的确认。"Zombie"进程要等到下次重启时才会消失,但它的存在不会影响系统性能。b、 该进程处于"kernel mode"(核心态)且在等待不可获得的资源。处于核心态的进程忽略所有信号处理,因此对于这些一直...转载 2016-08-19 14:30:29 · 99733 阅读 · 2 评论 -
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 评论 -
Linux中tty、pty、pts的概念区别
基本概念:1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。2> pty(虚拟终端):但是如果我们远程telnet转载 2016-04-14 20:08:26 · 589 阅读 · 0 评论 -
无缓冲I/O与有缓冲I/O区别
无缓冲I/O :不是内核不提供缓冲,而是对于用户层来说,没有提供缓存,而对内核来说还是有缓存的数据:数据流->内核缓存->磁盘有缓冲I/O:是指在用户层上再建立了一层缓存区(流缓存区),目的是为了减少read,write等系统调用的使用次数,降低系统开销。数据:数据流->流缓存区->内核缓存->磁盘e.g当用fwrite函数网磁盘写数据时,先把数据写入流缓冲区中,当达到一定原创 2016-04-14 19:58:13 · 2780 阅读 · 1 评论 -
关于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 评论 -
进程间通信-命名管道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 评论 -
对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 评论 -
总结之Unix的基础知识
1.1操作系统:从严格意义上讲,可以讲操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行的环境。我们通常将这种软件称为内核(kernel)OS提供的典型服务:1.执行新程序2.打开文件3.读取文件4,分配存储区5.以及获取当前时间1.2UNIX体系结构内核的接口:称之为系统调用(system call)内核-->系统调用-->shell,公共函数库-->应用程序;公共函原创 2016-04-17 21:42:28 · 476 阅读 · 0 评论 -
POSIX && XSI
POSIX 表示可移植操作系统接口(Portable Operating System Interface )。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC O转载 2016-05-28 16:16:06 · 2659 阅读 · 2 评论 -
(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 评论 -
linux fdisk运用
fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段 我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了;通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是/dev/hda ,另一个是/dev/sda ; fdisk 操作硬盘的命令格式如下: [root@localhost beinan转载 2016-07-06 18:12:26 · 582 阅读 · 0 评论 -
老生常谈exec函数族
1.exec函数说明fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可以原创 2016-05-23 21:20:38 · 488 阅读 · 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 评论 -
linux wait函数
#include #include pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,a.如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;b.如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。参数status转载 2016-03-13 21:46:16 · 608 阅读 · 0 评论 -
与原子操作相关的 volatile 和 sig_atmotic_t
1).volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,每次使用时都需要去内存里重新读取它的值,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int转载 2016-03-22 16:40:29 · 906 阅读 · 0 评论 -
getpass函数用法
getpass()函数用于从控制台输入一行字符串,关闭了回显(输入时不显示输入的字符串),适用于用密码的输入。语法 char * getpass (const char * prompt);参数prompt为提示字符串地址。getpass()函数返回值:输入字符串地址。#include#include int main(void) { char原创 2016-03-16 20:45:12 · 15162 阅读 · 1 评论 -
crypt密码加密函数的基本用法
定义函数char * crypt (const char *key,const char * salt);函数说明crypt是个密码加密函数,它是基于Data Encryption Standard(DES)演算法。crypt只适用于密码的使用,不适合用于资料加密。crypt()将参数key所指的字符串加以加密,key字符串长度仅取前8个字符,超过此长度转载 2016-03-16 20:23:43 · 17544 阅读 · 0 评论 -
fcntl函数用法详解
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd转载 2016-03-03 20:23:12 · 14067 阅读 · 1 评论 -
同步I/O sync、fsync和fdatasync函数
同步内核缓冲区1.缓冲区简介人生三大错觉之一:在调用函数write()时,我们认为该函数一旦返回,数据便已经写到了文件中.但是这种概念只是宏观上的.实际上,操作系统实现某些文件I/O时(如磁盘文件),为了保证I/O的效率,在内核通常会用到一片专门的区域(内存或独立的I/O地址空间)作为I/O数据缓冲区.它用在输入输出设备和CPU之间,用来缓存数据,使得低速的设备和高速的CPU能够协调工转载 2016-03-03 20:19:22 · 2719 阅读 · 0 评论 -
进程间通信管道进阶篇:linux下dup/dup2函数的用法
http://www.cnblogs.com/jht/archive/2006/04/04/366086.htmlhttp://www.cnblogs.com/GODYCA/archive/2013/01/05/2846197.html这两个函数的功能是输出的重定向 定义这两个函数的头文件是unistd.h,有兴趣的可以自己看看这个头文件包含的内容转载 2016-03-03 20:08:47 · 1252 阅读 · 0 评论 -
termios结构体
关于terimos结构体在POSIX规范中定义的标准接口,它类似于系统V中的termio接口,通过设置termios类型的数据结构中的值和使用一小组函数调用,你就可以对终端接口进行控制。最小的termios结构的典型定义如下:struct termios{ tcflag_t c_iflag; /* 输入模式 */原创 2016-01-26 17:19:34 · 1202 阅读 · 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 评论 -
uid_t gid_t等的定义
转自:http://hi.baidu.com/yedeqixian/item/049cbafeb3533356c8f3377fuid_t gid_t等的定义uid_tDefined as a type in:include/linux/types.h, line 35 -- 35 typedef __kernel转载 2015-11-28 14:27:17 · 6955 阅读 · 1 评论 -
Linux下DIR,dirent,stat等结构体详解
copy from 点击打开链接最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅。首先说说DIR这一结构体,以下为DIR结构体的定义:struct __dirstream { void *__fd; char *__data;转载 2015-11-28 14:23:48 · 16391 阅读 · 4 评论 -
内存分配-堆-栈-静态区
一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放 , 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)—,全局变量和静态变量的存储转载 2016-03-04 21:25:59 · 488 阅读 · 0 评论 -
pthread_cleanup_push/pop函数使用方法
一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如原创 2016-03-29 17:35:06 · 7293 阅读 · 0 评论 -
进程与线程的区别与联系(经典面试题)
这问题,估计计算机专业的同学在找研发等工作的时候都会遇到过。前几天某老牌软件厂商的电话面试就提到了这一经典问题,今天招聘会上又有不少同学说在面试的时候被问到这点。在这里我就起个头,大家有啥想法意见等都欢迎回帖交流。 要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本转载 2016-03-17 15:26:19 · 2907 阅读 · 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 评论