![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
unix高级编程
u010154760
这个作者很懒,什么都没留下…
展开
-
Linux之atime,mtime,ctime
Linux之atime,mtime,ctime首先可以使用stat 命令来查询文件的inode信息,其中包括ctime atime mtimeMtime:文件内容改变,ctime文件的状态改变,如chmod权限等。调整mtime,ctime会变。调整ctime,mtime不一定变化。 1.文件的容易理解:文件的 Access time转载 2015-05-25 16:02:45 · 484 阅读 · 0 评论 -
Linux串口IO模式的一些心得
众所周知,在Linux系统下所有设备都是以文件的形式存在,串口也一样。通常I/O操作都是有阻塞与非阻塞的两种方式。其中"超时"这个概念其实是阻塞中的一种处理手段,本质还是属于阻塞的I/O模式.在Linux中串口的IO操作 本文将它分为三种状态:阻塞状态超时状态非阻塞状态这三种状态的转换组合有这么几种:阻塞转载 2015-04-16 19:21:43 · 521 阅读 · 0 评论 -
重定向小结
重定向是一个很有趣的话题,重定向这项技术减轻了程序编写者的负担,因为他只需要默认操作标准输入输出即可,而实际的标准输入可能是一个文本文 件,而这一步的替换由shell来实现,不需要我们来操心,对程序来说是透明的。这里的命令默认都是在bash下,如果你使用的是其他的比如csh,那么请查阅相关的手册或资料。先来挑战一下你的理解能力,在你第一眼看到下面这行的时候你知道它在干嘛吗?转载 2015-04-16 19:14:07 · 403 阅读 · 0 评论 -
execl函数
今天在写一个进程执行的小程序,编译时提示: 函数调用中缺少哨兵 [-Wformat][cpp] view plaincopy1 #include"stdio.h" 2 #include 3 void main() 4 { 5 execl("/bin/ls","ls","-l",0); 6转载 2015-04-16 19:17:40 · 443 阅读 · 0 评论 -
重定向详解
在POSIX shell中,命令的结果可以通过%>的形式来定义(其中%表示文件描述符:1为标准输出stdout、2为标准错误stderr)!系统默认%值是1,也就是1>,而1>可以简写为>,也就是默认为>。而stdout的默认目标是终端(这点不用验证吧)。另外,stderr的默认目标我个人认为也是终端,比如:#abcddcbash: abcddcba: not found.错误信息显示转载 2015-04-16 19:09:27 · 403 阅读 · 0 评论 -
shell命令 2>&1
在unix高级环境编程第三章的习题有一个问题:./a.out > outfile 2>&1 # 1./a.out 2>&1 > outfile # 2问这两者有什么区别。这个首先的说明几点:1.在unix和类unix(linux之类)中以文件描述符的形式打开一个文件,这个文件描述符是一个非负数。2.0代表标准输入,1代表标准输出,2代表标准错误输出3.默认的转载 2015-04-16 16:42:04 · 403 阅读 · 0 评论 -
fgets和ferror
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。转载 2015-04-16 14:16:08 · 1105 阅读 · 0 评论 -
ftruncate函数
ftruncate()函数函数功能:改变文件大小相关函数:open、truncate表头文件:#include 函数原型:int ftruncate(int fd, off_t length)函数说明:ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件件大小比参数转载 2015-04-15 16:41:17 · 555 阅读 · 0 评论 -
C语言——stdio.h
int fgetc(FILE * stream); get character from stream 返回流中的一个字符,并以int的类型返回,如果碰到文件的结尾,或者一个错误发生,函数返回EOF,同时相应的错误或eof指示器被设置,可以用ferror或者feof来检查发生一个错误,或者到达了文件的末尾int getc(FILE * stream); get chara转载 2015-04-16 14:21:36 · 535 阅读 · 0 评论 -
字符串读写函数fgets
字符串读写函数fgets一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入 字符数组str中。转载 2015-04-16 14:13:15 · 1215 阅读 · 0 评论 -
fstat函数及struct stat结构
一、fstat 函数功能:由文件描述符取得文件状态。相关函数:stat 、lstat 、chmod 、chown 、readlink 、utime。头文件: #include #include 函数声明: int fstat (int filedes,struct *buf);描述: fstat()用来将参数fi转载 2015-04-15 21:50:17 · 421 阅读 · 0 评论 -
LCD设备驱动 --- 帧缓冲(简析1)
帧缓冲(framebuffer)是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。帧缓冲设备为标准字符设备,主设备号为29,对应于/dev/fbn设备文件。见:drivers\video\fbmem.c 中的 module_init(fbmem_init); 就可知道 fbmem_init 是其字转载 2015-04-16 12:37:54 · 658 阅读 · 0 评论 -
墙上时间
6.2.2 墙上时间墙上时间,在系统启动过程中根据实时钟(RTC)芯片保存数据进行初始化,在系统运行期间由系统时钟维护并在合适的时刻和RTC芯片进行同步。墙上时间存储于系统核心变量xtime中,该变量记录了现实世界中的年月日格式的时间,以便内核对某些对象和事件作时间标记,如记录文件的创建时间、修改时间、上次访问时间,或者供用户进程通过系统调用来使用。内核中使用struct tim转载 2015-04-15 22:27:01 · 667 阅读 · 0 评论 -
文件I/O之判断文件类型(stat结构)
1 文件类型我们平时最常接触的文件类型有普通文件(regular file)和目录(di-rectory file),但是 UNIX 系统提供了多种文件类型:(1) 普通文件(regular file)这种文件包含了某种形式的数据,这些数据无论是文件还是二进制对于 UNIX 内核而言都是一样的。对普通文件内容的解释有处理该文件的应用程序进行。(2) 目录文件(dir转载 2015-04-15 21:47:55 · 1777 阅读 · 0 评论 -
文件映射mmap、msync、munmap(open后建立文件映射,close后文件映射依然存在,msync依然可以实现同步)
文件映射:open 打开文件后—>使用mmap建设文件映射;建立文件映射后,可以对映射到的内存空间进行读/写操作。然后使用msync将修改结果同步到文件中。问题:问close后对映射空间的操作能够同步到文件中吗?经过测试:可以,只要文件映射存在,就可以通过msync将映射空间的内容写入文件,实现空间和文件的同步。应用场景:在实际的项目转载 2015-04-13 23:06:41 · 2776 阅读 · 1 评论 -
c语言NULL和0区别及NULL详解
c语言NULL和0区别及NULL详解本文转载地址:http://www.cnblogs.com/youxin/archive/2012/03/27/2420023.html先看下面一段代码输出什么:#includestdo.h>int main(){ int *p=NULL; printf("%s",p); }输出 ,单转载 2015-04-16 18:24:03 · 447 阅读 · 0 评论 -
剖析cmd >file 2>&1 和 cmd >file 2>file 的差别
先看例子:r2007@www r2007 $ (echo -n 123456;sleep 1;echo -n abc >&2;sleep 1;echo -n 789)>puzzle 2>puzzler2007@www r2007 $ cat puzzleabc456789r2007@www r2007 $ (echo -n 123456;sleep 1;转载 2015-04-16 19:05:54 · 750 阅读 · 0 评论 -
出现"函数调用中缺少哨兵"的情况(execl)
在写一个练习时候出现的.觉得奇怪,因为翻译说缺少哨兵??什么意思呢...=====================================/*//练习如下,创建一个进程*/#include #include #include int main(void){printf("Running ps with execlp\n");execlp("p转载 2015-04-16 19:17:37 · 1211 阅读 · 0 评论 -
[转]tcp收发需要缓冲区,udp不需要缓冲区
(一)基础知识 IPv4 数据报最大大小是65535(16位),包括IPv4头部。IPv6 数据报最大大小是65575,包括40个字节的IPv4头部MTU,这是由硬件规定的,如以太网的MTU是1500字节,IPv4要求最小MTU是68字节,IPv6要求最小MTU是576字节path MTU: 指两台主机间的路径上最小MTU分片(fragmentation):指ip数据报大小超过相应转载 2015-06-09 22:10:36 · 496 阅读 · 0 评论 -
带外数据OOB与紧急模式URG
A,TCP支持带外数据OOB吗?与紧急模式URG有什么关系? TCP支持带外数据,但是只有一个OOB字节,TCP的带外数据是通过紧急模式URG实现的.B,我们知道send(sendfd,"ABC",3,MSG_OOB),将发送3个字节的带外数据OOB数据.但是这里TCP又只支持一个字节的OOB,难道丢掉2个字节? TCP将把紧急模式URG 置位,紧急指针定位第三个字节(转载 2015-06-09 21:54:32 · 580 阅读 · 0 评论 -
网络IO之阻塞、非阻塞、同步、异步总结
1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。转载 2015-06-09 22:13:21 · 423 阅读 · 0 评论 -
Linux进程控制——exec函数族
1、简介在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是:#include extern char **environ;int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int e转载 2015-06-09 09:54:11 · 403 阅读 · 0 评论 -
C程序调用shell脚本共有三种方法
C程序调用shell脚本共有三种法子 :system()、popen()、exec系列函数call_exec1.c ,内容为:system() 不用你自己去产生进程,它已经封装了,直接加入自己的命令exec 需要你自己 fork 进程,然后exec 自己的命令popen() 也可以实现执行你的命令,比system 开销小1)system(shell命令或shell脚本路径);转载 2015-06-09 09:53:41 · 454 阅读 · 0 评论 -
网络编程socket之listen函数
摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:#includeint listen(int sockfd, int backlog)转载 2015-05-19 14:01:39 · 24222 阅读 · 0 评论 -
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。守护进程是在后台运行不与任何控制终端关联,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。守护进程是在后台运行不与任何控制终端关联,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。大多数服务都是通过守护进程实现的。它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就转载 2015-06-18 13:01:29 · 641 阅读 · 0 评论 -
关于函数strtok和strtok_r的使用要点和实现原理(一)
strtok函数的使用是一个老生常谈的问题了。该函数的作用很大,争议也很大。以下的表述可能与一些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证。交代一下实验环境是必要的,winxp+vc6.0,一个极端平民化的实验环境。本文中使用的源代码大部分来自于网络,我稍加修改作为例证。当然,本人水平有限,有不妥之处在所难免,各位见谅的同时不妨多做实验,以实验为证。strtok的函数原型转载 2015-06-16 19:38:25 · 450 阅读 · 0 评论 -
Linux IPC实践(9) --System V共享内存
共享内存API[cpp] view plaincopy#include #include int shmget(key_t key, size_t size, int shmflg); void *shmat(int shmid, const void *shmaddr, int shmflg); int shmd转载 2015-05-15 10:38:52 · 367 阅读 · 0 评论 -
信号量 Linux函数 semget();semctl();semop();
Linux进程通信之信号量信号量(semaphore)是变量,是一种特殊的变量。它紧取正值。对信息号量的操作只有2中:等待(wait)和发送信号(signal).信号量比较难理解。下面我们一个个的看一下各个函数。与信号量处理的函数有:semget();semctl();semop();第一个semget()函数,与共享内存的shmget()函数类似。转载 2015-05-14 22:28:18 · 598 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之转载 2015-04-27 13:48:36 · 499 阅读 · 0 评论 -
linux 0号进程和1号init进程的用途。
进程0:Linux引导中创建的第一个进程,完成加载系统后,演变为进程调度、交换及存储管理进程进程1:init 进程,由0进程创建,完成系统的初始化. 是系统中所有其它用户进程的祖先进程来源:http://zhidao.baidu.com/link?url=IVa0Gm2gGCcMtSKZPdar5zv-HJrr_kcSdvyA4mLivd转载 2015-04-25 18:09:11 · 1116 阅读 · 0 评论 -
fork exec对子进程继承父进程信号处理机制的影响--APUE
当一个进程调用fork时,因为子进程在开始时复制父进程的存储映像,信号捕捉函数的地址在子进程中是有意义的,所以子进程继承父进程的信号处理方式。特殊的是exec,因为exec运行新的程序后会覆盖从父进程继承来的存储映像,那么信号捕捉函数在新程序中已无意义,所以exec会将原先设置为要捕捉的信号都更改为默认动作。来源:http://blog.csdn.net/zlgg163/a转载 2015-04-21 21:45:56 · 808 阅读 · 0 评论 -
解释器文件说明
APUE第二版第197页上说“在解释器pathname后可跟随可选参数。如果一个解释器支持-f选项,那么在pathname后经常使用的就是-f。例如可以以下列方式执行awk(1)程序: awk -f myfile它告诉awk从文件myfile中读awk程序。”今天在cent-os下试验了一下,因为之前对这个myfile和里面的内容存在疑惑;试验结果如下:1、首先在桌面原创 2015-04-21 21:14:55 · 450 阅读 · 0 评论 -
Crash Error Debugging
这些天在根据游戏后台的崩溃信息对有游戏进行调试,刚开始调试的时候方向还不是很明确,多调试几次后也摸索出来了一些规律,这里简单地对网上的一些资料做个总结,后面也会持续更新。 SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信号。一、SIGSEGVOfficial Description:SIGSEGV --- Segment Fault.转载 2015-04-14 21:27:44 · 373 阅读 · 0 评论 -
回调函数
回调函数 在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内某些代码(我公司软件等)时没用到。于是,我对回调函数产生了很大的好奇。以前,我写VC程序时用到过回调函数,但是没有用C语言来使用。最近,看到国外大量的经典代码中广泛使用了回调函数(LWIP、某两个公司的OPC程序等),都是C语言来实现的,而不是VC windows程序中别人实现自己使用的那种。转载 2015-04-14 21:30:00 · 283 阅读 · 0 评论 -
重复数据删除In-band和Out-of-band的区别
听说基于硬件的重复数据删除产品中有In-band和Out-of-band两种功能,请问这两种功能的区别,哪种更好了? 首先,让我讲讲基于硬件的重复数据删除产品的好处:基于硬件的重复数据删除产品能减轻与基于软件的重复数据删除产品相关的处理负担。重复数据删除功能还被融合到其它数据保护硬件中,如备份平台、虚拟磁带库(VTL)系统甚至通用存储系统像网络附加存储(NAS)等。通常这种方法并不旨在缩小备转载 2015-03-26 21:11:52 · 950 阅读 · 0 评论 -
wait和waitpid详解
wait的函数原型是: #include#include pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一转载 2015-03-26 19:03:46 · 472 阅读 · 0 评论 -
truss 命令
truss 命令用途跟踪进程的系统调用、动态装入的用户级函数调用、接收的信号和造成的机器故障。语法truss [ -f] [ -c] [ -a] [ -l ] [ -d ] [ -D ] [ -e] [ -i] [ { -t | -x} [!] Syscall [...] ] [ -s [!] Signal [...] ] [ { -m }[!] Fault [...]] [ {转载 2015-03-26 18:42:21 · 631 阅读 · 0 评论 -
强制性锁和建议性锁
首先,建议性锁和强制性锁并不是真正存在的锁,而是一种能对诸如记录锁、文件锁效果产生影响的两种机制。1.建议性锁机制是这样规定的:每个使用文件的进程都要主动检查该文件是否有锁存在,当然都是通过具体锁的API,比如fctl记录锁F_GETTLK来主动检查是否有锁存在。如果有锁存在并被排斥,那么就主动保证不再进行接下来的IO操作。如果每一个进程都主动进行检查,并主动保证,那么就说这些进程都以一致转载 2015-03-26 16:57:08 · 1036 阅读 · 0 评论 -
什么是带外数据
什么是带外数据?带外数据是什么意思?许多传输层都支持带外数据(Out-Of-Band data),有时候也称为快速数据(ExpeditedData).之所以有带外数据的概念,是因为有时候在一个网络连接的终端想“快速”的告诉网络另一边的终端一些信息.这个“快速”的意思是我们的“提示”信息会在正常的网络数据(有时候称为带内数据In-Band data)之前到达网络另一边的终端.这说明,带外数据拥有转载 2015-03-26 21:19:02 · 7811 阅读 · 0 评论 -
"In-Band"和"Out-of-Band"虚拟化区别
导读:当我们实施一个In-Band虚拟储存器网络的时候,数据和控制在相同的路径上的流动。 抽象层存在于数据路径中,而且存储在域管理器的控制之下可以被设置为存储池。 大体上,In-Band解决方案实施起来是比较简单..... 当我们实施一个In-Band虚拟储存器网络的时候,数据和控制在相同的路径上的流动。 抽象层存在于数据路径中,而且存储在域管理器的控制之下可以被设置为存储池。 大体转载 2015-03-26 21:00:20 · 2906 阅读 · 0 评论