
Linux C编程
文章平均质量分 79
BruceZhang
计算机专业的一个小学生
展开
-
Linux C编程--进程介绍4--errno
当linux中的C api函数发生异常时,一般会将errno变量(需includeerrno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息 (1)void pe原创 2013-03-03 15:07:03 · 2498 阅读 · 2 评论 -
Linux C编程--网络编程2--面向连接的网络编程
由于之前已经写过一篇介绍Socket通信的文章,故这篇文章是在那一篇的基础上继续补充完善,另一篇的链接如下:http://blog.youkuaiyun.com/dlutbrucezhang/article/details/8577810其中介绍各个函数,接下来介绍其他的一些常用系统函数。首先给出一个实例说明常用函数的用法。编写一个客户机--服务器程序,其中客户机使用流套接字向服务原创 2013-03-07 15:14:17 · 3600 阅读 · 0 评论 -
Linux C编程--网络编程3--面向无连接的网络编程
数据报套接字操作由于底层的协议不同,数据报套接字与数据流套接字有一些基本的不同。数据报套接字是UDP协议,UDP是无连接、不可靠的数据报协议。在这种通信方式中,客户不与服务建立连接,它只是通过sendto向服务程序发送数据报,sendto函数本身要求一个地址参数给出服务程序的地址。 同样,服务程序也不接收来自客户的连接,它只是调用recvfrom函数,这个函数等待来自某个客户的数据,并原创 2013-03-07 15:32:15 · 3973 阅读 · 0 评论 -
Linux C编程--线程操作1--线程概述和简单的线程操作
关于linux线程在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程. 如图1.进程所维护的是程序所包含的资源(静态资源), 如: 地址空间, 打开的文件句柄集, 文件系统状态, 信号处理handler, 等;线程所维护的运行相原创 2013-03-06 09:34:49 · 4300 阅读 · 0 评论 -
Linux C编程--操作文件结束和错误的判断方法(函数)
多数函数(fgets()、gets()、putc()、ungetc()、fread()等)当调用不成功时都返回EOF,EOF的值为0,它既用于报告文件结束,也用于报告错误情形下的返回。因此,为了区分究竟是错误返回还是文件结束返回,就需要调用ferror()函数来确定是否存在错误,调用feof()函数检查是否遇到文件结束。每一个流对象内部有两个指示器:一个为错误指示器,当读写文件出错时该指示原创 2013-03-01 19:49:36 · 4001 阅读 · 1 评论 -
Linux C编程--临时文件
使用临时文件要考虑几个问题:保证临时文件间的文件名不互助冲突。保证临时文件中内容不被其他用户或者黑客偷看、删除和修改。Linux中提供了mkstemp 和 tmpfile 函数来处理临时文件。mkstemp函数int mkstemp(char *template);mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户才能访问这个临原创 2013-03-01 21:07:37 · 3828 阅读 · 0 评论 -
Linux C编程--打开和关闭流
以下函数用于打开和关闭一个流。#include FILE * fopen (const char *pathname, const char *opentype);int fclose (FILE *stream);FILE * freopen (const char *pathname, const char *opentype, FILE *stream);fopen(原创 2013-03-01 21:44:53 · 2840 阅读 · 0 评论 -
Linux C编程--目录文件操作
1.stat 获取文件属性 #include #include #include int stat(const char *filename,struct stat *buf); int fstat(fd, struct stat *buf); int lstat(con原创 2013-03-01 18:57:52 · 5570 阅读 · 0 评论 -
Linux C编程--格式化I/O
printf(格式控制,输入表列)例:printf("%d%d",a,b)(1)d格式符:输出一个有符号的十进制整数(2)c格式符:输出一个字符(3)s格式符:输出一个字符串(4)f格式符:输出实数,有几种用法: A.基本型(%f):实数中的整数部分全部输出,小数部分输出6位; B.指定数据宽度和小数位数(%m.nf):%7.2f原创 2013-03-01 21:02:50 · 2117 阅读 · 0 评论 -
Linux C编程--进程介绍1--进程的创建
这篇文章介绍的内容包括1.Linux进程--进程标识号2.进程控制--进程创建1.Linux进程--进程标识号进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。多个程序并发执行,可以提高系统的资源利用率和吞吐量。进程和程序:程序只是一个静态的数据和指令集合,而进程是一个程序的动态执行过程,具有生命周期,是动态的产生和消亡的。原创 2013-03-02 19:46:38 · 3296 阅读 · 0 评论 -
Linux C编程--进程介绍2--exec函数
exec函数族fork()函数是用于创建一个子进程,该子进程几乎拷贝了父进程的全部内容,但是,这个新创建的进程如何执行呢?这个exec函数族就提供了一个在进程中启动另一个程序执行的方法。 exec函数族包括6个函数:int execl(const char *path, const char *arg, ...);int execlp(const char *file, c原创 2013-03-02 20:35:17 · 3515 阅读 · 0 评论 -
Linux C编程--进程介绍3--进程终止和等待
进程结束1.在Linux中任何让一个进程结束进程退出表示进程即将结束。在Linux中进程退出分为了正常退出和异常退出两种。1>正常退出a. 在main()函数中执行return 。b.调用exit()函数c.调用_exit()函数2>异常退出a.调用about函数b.进程收到某个信号,而该信号使程序终止。不管原创 2013-03-02 21:57:45 · 8185 阅读 · 0 评论 -
Linux C编程--fork()详解
在Linux系统下学习一个系统函数最好的方法就是阅读其源码,首先,给出fork函数的源码/** linux/kernel/fork.c* //--fork()用于创建子进程* (C) 1991 Linus Torvalds*//** 'fork.c' contains the help-routines fo原创 2013-03-19 16:14:41 · 9394 阅读 · 2 评论 -
Linux C编程--网络编程1--字节顺序和字节处理函数
字节顺序不同的 CPU 有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1 . Little endian :将低序字节存储在起始地址 2 . Big endian :将高序字节存储在起始地址 LE little-endian最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符原创 2013-03-07 14:24:51 · 5524 阅读 · 2 评论 -
Linux C编程--线程操作3--线程属性解析
线程属性结构如下: typedef struct { int detachstate; 线程的分离状态 int sch原创 2013-03-06 18:36:09 · 2795 阅读 · 0 评论 -
Linux C编程--string.h函数解析
函数名: stpcpy功 能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include #include int main(void){ char string[10]; char *str1 = "abcdefghi";原创 2013-03-06 16:33:19 · 5417 阅读 · 0 评论 -
Linux C编程--进程介绍5--system函数
表头文件#i nclude定义函数int system(const char * string);这个函数是用fork,exec,waitpid这三个系统函数实现的,返回值相对比较复杂。函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在原创 2013-03-03 15:17:00 · 2590 阅读 · 0 评论 -
Linux C编程--进程介绍6--进程的各种标识
本文将介绍进程的:1.进程的用户标识号2.进程标识号进程的用户ID Linux/Unix进程涉及到三类用户ID: 1、实际用户ID(real user id,RUID):为该进程的的创建者的用户ID,也可以说是进程的执行者。该ID仅root用户可以修改; 2、有效用户ID(effective user id,EU原创 2013-03-03 16:10:47 · 2440 阅读 · 0 评论 -
Linux C编程--进程间通信(IPC)2--信号处理函数
本文将对两个信号处理函数进行介绍1.signal2.sigaction1.signalsignal(设置信号处理方式)相关函数 sigaction,kill,raise表头文件 #include定义函数 void (*signal(int signum,void(* handler)(int)))(int);函数说明原创 2013-03-04 19:59:48 · 2763 阅读 · 0 评论 -
Linux C编程--进程间通信(IPC)1--进程间通信机制概述
linux下进程间通信的几种主要手段简介:管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Uni原创 2013-03-04 19:05:10 · 2878 阅读 · 0 评论 -
Linux C编程--进程介绍7--综合应用实例
第一个实例重点说明fork和exec系统函数该实例是一个交互式命令处理程序,它能完成Linux系统标准Shell的小部分功能,具体功能如下所述:1.提交命令的参数最多为8个2.可前,后台执行3.一命令行中可同时拥有多个命令,彼此之间用分号隔开实现程序的主流程如下:for(;;){output("mini_SH-->");readcmd();docom原创 2013-03-04 18:22:19 · 2421 阅读 · 0 评论 -
Linux C编程--进程间通信(IPC)3--信号集和发送信号介绍
Linux信号集 1.信号集概念 信号集是一个能表示多个信号的数据类型,sigset_t set ;set即一个信号集。 既然是一个集合,就需要对集合进行添加/删除等操作。 int sigemptyset(sigset_t *set); 将set集合置空 int sigfillset(sigset_t *set); 将所有信号加入set集合原创 2013-03-05 09:20:43 · 3366 阅读 · 0 评论 -
Linux C编程--进程间通信(IPC)4--管道详解
linux管道管道相关内容的简介管道是单向的字节流,它将某个进程的标准输出连接到另一个进程的标准输入。管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。管道和有名管道的读写规则是在程序中应用它们的关键。管道相关的概念在linux中管道是通过指向同一个原创 2013-03-05 10:22:23 · 10460 阅读 · 7 评论 -
Linux C编程--进程间通信(IPC)5--System V IPC 机制1--消息队列
System V IPC 机制1.基本概念IPC对象一经创建,系统内核即为该对象分配相关的数据结构。为方便对IPC对象的管理,Linux提供了专门的IPC控制命令,主要包括查看IPC对象信息的ipcs和删除IPC对象的ipcrm。查看IPC对象信息命令:ipcs [-aqms]参数说明:1)-a:查看全部IPC对象信息。2)-q:原创 2013-03-05 18:42:46 · 7924 阅读 · 4 评论 -
Linux C编程--进程间通信(IPC)5--System V IPC 机制2--信号量
信号量定义 最简单的信号量是一个只有0与1两个值的变量,二值信号量。这是最为通常的形式。具有多个正数值的信号量被称之为通用信号量。在本章的其余部分,我们将会讨论二值信号量。P与V的定义出奇的简单。假定我们有一个信号量变量sv,两个操作定义如下:P(sv) 如果sv大于0,减小sv。如果sv为0,挂起这个进程的执行。V(sv) 如果有进程被挂起等待sv,使其恢原创 2013-03-05 19:52:22 · 3254 阅读 · 1 评论 -
Linux C编程--进程间通信(IPC)5--System V IPC 机制3--共享内存
共享内存最为高效的进程间通信方式 进程直接读写内存,不需要任何数据的拷贝 •为了在多个进程间交换信息,内核专门留出了一块内存区 •由需要访问的进程将其映射到自己私有地址空间 •进程直接读写这一内存区而不需要进行数据的拷贝,提高了效率 多个进程共享一段内存,需要依靠某种同步机制,如互斥锁和信号量等 l共享内存编程步骤: 1.原创 2013-03-05 20:58:08 · 2984 阅读 · 2 评论 -
Linux C编程--线程操作2--线程同步详解
linux线程同步之互斥 在windows中,为了让多个线程达到同步的目的,在对于全局变量等大家都要用的资源的使用上,通常得保证同时只能由一个线程在用,一个线程没有宣布对它的释放之前,不能够给其他线程使用这个变量。在windows里,我们可以用时EnterCriticalSection()和 LeaveCriticalSection()函数.那么在linux里,有什么类似的机制呢?原创 2013-03-06 10:21:06 · 4693 阅读 · 0 评论 -
Linux C编程--进程间通信(IPC)6--综合应用实例--信号量和共享内存的使用
实例介绍:这是一个使用共享存储交换数据的例子。其中,一个程序程序是数据处理程序,另一个程序是数据生成程序。这两个程序使用两个信号量,consumer和producer,来同步它们之间对共享内存的访问。consumer信号量指出共享存储段中的数据是否已被处理完毕,只有在数据处理完毕之后才允许数据生成程序在其中继续生成数据;producer指出数据是否已经生成在共享内存中。一个共享内存用来交换数据原创 2013-03-06 08:42:55 · 2919 阅读 · 0 评论 -
Linux C编程--main函数参数解析
我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组转载 2013-02-28 16:11:32 · 23751 阅读 · 2 评论