Linux C
文章平均质量分 52
linux_zhu
这个作者很懒,什么都没留下…
展开
-
fcntl系统调用
一、函数原型二、参数说明三、操作命令说明一、函数原型int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 根据文件描述符来操作文件的特性。可以改变一个已打开的文件的属性,可以重新设...原创 2018-04-07 13:03:30 · 305 阅读 · 0 评论 -
linux daemon 系统调用
int daemon(int nochdir, int noclose);daemon 函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。当 nochdir 为 0 时, daemon 将更改进程的根目录为 root 目录( / 目录)当 noclose 为 0 时, daemon 将进程的 STDIN , SDTERR 都重定向到 /dev/null 。da原创 2015-09-06 15:09:53 · 1293 阅读 · 0 评论 -
linux 守护进程
Linux 系统中的守护进程是一种运行在后台的程序。而守护进程,也就是通常所说的 Daemon 进程。它通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 Linux 大多数服务器进程就是用守护进程实现的,例如 Web 服务。守护进程常常在系统引导装入时启动,在系统关闭时终止。守护进程最大的特点是运行在后台,与终端无连接,除非特殊情况下,用户不能操作守护进程。在 Linu原创 2015-09-06 11:47:21 · 606 阅读 · 0 评论 -
linux select 系统调用
linux系统提供系统调用 select,它允许程序挂起,并等待从不止一个文件描述符的输入。它的原理如下:获得所需要的文件描述符列表:将此描述符传给 select;select 挂起直到任何一个文件描述符有数据到达;select 设置一个变量中的若干位,用来通知哪一个文件描述符已经有输入的数据。select 函数原型:int select(int nfds, fd_set *r原创 2015-09-10 15:10:34 · 1281 阅读 · 0 评论 -
linux c 读取配置文件
源码如下:config.h#ifndef CONFIG_H_INCLUDED#define CONFIG_H_INCLUDED#include #include #include #include #include typedef struct item_t{ char key[50]; char value[50];}ITEM;/*去除字符串右端空原创 2015-09-09 13:40:30 · 752 阅读 · 0 评论 -
linux 多线程API
运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需的时间远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的30倍左右。同一进程下的线程直接共享数据空间。int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *原创 2015-09-01 23:46:37 · 525 阅读 · 0 评论 -
linux popen函数
函数原型FILE *popen(const char *command, const char *type);int pclose(FILE *stream);函数说明 popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执原创 2015-07-24 16:09:06 · 934 阅读 · 0 评论 -
linux sigaction函数(注册信号)使用
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。参数说明: signum : 要操作的信号 act : 要设置的对信号的新处理方式 oldact : 原来对信号的处理方式 返回值: 成功返回0,原创 2015-08-03 17:47:04 · 2229 阅读 · 0 评论 -
Linux 进程通信之管道
管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。数据被一个进程读出后,将被从管道中删除,其他读进程将不能再读到这些数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞。 管道包括无名管道和有名管道两种,无名管道只能用于父进原创 2015-08-03 00:06:15 · 785 阅读 · 0 评论 -
linux 信号集操作
信号掩码 – 被阻塞的信号集 每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞。当前被进程阻塞的信号集也叫信号掩码,类型为sigset_t。每个进程都有自己的信号掩码,且创建子进程时,子进程会继承父进程的信号掩码。信号阻塞和忽略的区别 阻塞的概念与忽略信号是不同的:操作系统在信号被进程解除阻塞之前不会将信号传递出去,原创 2015-08-03 16:13:48 · 734 阅读 · 0 评论 -
linux 进程通信之 信号量
信号量又名信号灯,与其他进程间通信方式大不相同,主要用途是用来保护临界资源。进程可以根据它判断是否能访问某些共享资源。除了用于访问控制外,还可以用于进程同步。分类:二值信号灯:信号灯的值只能取0或1,类似与互斥锁。但两者有不同:信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值;互斥锁更强调进程,占用资源的进程使用完资源后,必须有进程本身来解锁。(我们常说的PV操原创 2015-08-15 16:30:35 · 713 阅读 · 1 评论 -
linux c 经常混淆的概念
指针函数 and 函数指针指针函数是指带指针的函数,即本质是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。定义格式类型名 *函数名(函数参数列表)函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。定义格式返回值类型 (*指针变量名)(形参列表)指针数组 and 数组指针指针数组数组元素全为指针的数组原创 2015-07-22 10:17:21 · 1064 阅读 · 0 评论 -
linux 进程通信之 信号
信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了那些系统事件。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递个它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞取消时才被传递给进程。信号的产生 1.用户在终端按下某些键时,终端驱动程序会发送信号原创 2015-08-03 13:56:33 · 508 阅读 · 0 评论 -
使用 openssl 的AES 加密
源码:#include <stdio.h>#include <memory.h>#include <stdlib.h>#include <openssl/aes.h>int main(int argc, char *argv[]){ unsigned char buf[16] = "1234567890abcde"; unsigned char buf2[16]; un原创 2015-07-31 16:04:23 · 2019 阅读 · 0 评论 -
linux mmap 映射文件
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);函数功能:把文件内容映射到一段内存上(虚拟内存),通过对这段内存的读取和修改,实现对文件的读取和修改。参数说明addr:指定映射的起始地址,通常设为NULL(表示由系统指定)。length:代表将文件中多大的部分映射到内存原创 2015-08-12 23:22:52 · 1195 阅读 · 0 评论 -
linux 进程间通信之 消息队列
消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;有读权限的进程则可以读走消息。读走就没有了。消息队列是随内核持续的。 只有内核重启或人工删除时,该消息才会被删除。在系统范围内,消息队列与键值唯一对应。关于消息队列使用的APIkey_t ftok(const char *path原创 2015-08-10 15:47:53 · 636 阅读 · 0 评论 -
linux c 操作utmp 和 wtmp 文件接口
/var/run/utmp 保存当前在本系统中的用户信息 /var/log/wtmp 保存登陆过本系统的用户信息他们保存的信息是基于结构体 struct utmp 的(/usr/include/bits/utmp.h)utmp 结构体定义如下:struct utmp{ short int ut_type; //登录类型 pid_t ut_pid; //login 进程的原创 2015-07-19 21:41:50 · 5993 阅读 · 0 评论 -
linux c 获取系统关机时间
源码如下:#include <utmp.h>#include <stdio.h>#include <string.h>#include <time.h>int main(){ struct utmp *u , ut; FILE *fp = fopen("shutdown_note","w+"); utmpname("/var/log/wtmp"); whil原创 2015-07-19 22:00:18 · 1362 阅读 · 1 评论 -
linux C 实现重定向
在 Linux 系统中,每个进程都有 STDIN 、STDOUT 和 STDERR 这 3 种标准 I/O 。它们是程序最通用的输入输出方式。每个进程都会维护一个文件描述符表(FILE DESCRIPTOR TABLE),用以定位被打开的文件。表中的记录(文件描述符)是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD原创 2015-09-06 15:34:17 · 6404 阅读 · 0 评论 -
基于 TCP 协议的并发服务器程序
服务端:#include #include #include #include #include #include #include #include #include #include //线程执行函数,负责读写void *thr_fn ( void *arg ){ int size, j; char recv_buf[1024]; int原创 2015-09-06 22:27:28 · 902 阅读 · 0 评论 -
Linux软链接与硬链接
Hard Link (实体连接,硬式连接或实际连接)Symbolic Link (符号链接,类似Windows 快捷方式)使用命令创建连接Hard Link (实体连接,硬式连接或实际连接) 硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在一下几个特性: * 文件有相同的 i 节点及数据块; * 只能对已存...原创 2018-04-17 18:05:01 · 1236 阅读 · 0 评论 -
C语言编程规范
C 语言编程规范 编制:[email protected]版本:V0.1 目录目录一、简介二、基本原则三、排版3.1 程序块缩进3.2 代码群落加空行3.3 一行不要超过80列3.4 流程控制语句必须用大括号包含起来3.5 操作符3.6 函数排版3.7 头文件包含次序四、注释五、标识符命名5.1 变量5...原创 2018-03-16 18:16:39 · 7341 阅读 · 0 评论 -
linux c 字符串处理常用函数
原创 2018-03-06 20:09:56 · 257 阅读 · 0 评论 -
doxygen 配置说明
# Doxygen文件的编码方式,默认为UTF-8,若希望支持中文,最好设置为 GB2312DOXYFILE_ENCODING = UTF-8# Project 的名字,以一个单词为主,多个单词请使用双引号括住PROJECT_NAME = "Test"# 文档版本号,可对应于项目版本号,譬如 svn 、 cvs 所生成的项目版本号PROJECT_NUM原创 2016-03-17 15:14:34 · 685 阅读 · 0 评论 -
linux c 验证 linux 用户密码
linux 用户加密后的密码是存放在 /etc/shadow 文件中。 shadow 文件的说明见以下链接:http://blog.csdn.net/u011641885/article/details/46681697 最初linux将用户的密码通过某种one-way function得到一个散列(加密)后的字符串,并存储该字符串在密码文件中,但这种方式易遭受字典攻击,攻击原创 2016-01-02 19:37:47 · 3204 阅读 · 1 评论 -
linux C 读取 /etc/passwd 和 /etc/shadow 文件 API
关于 /etc/passwd :http://blog.csdn.net/u011641885/article/details/46368465关于 /etc/shadpw :http://blog.csdn.net/u011641885/article/details/46681697读取 /etc/passwd 的 API 为struct passwd *getpwna原创 2016-01-02 18:36:31 · 2678 阅读 · 0 评论 -
Linux C 时间服务器
#include #include #include #include #include #include #include #include #include #define PORTNUM 13000#define HOSTLEN 256#define oops(msg) {perror(msg);exit(1);}int main(int argc,char原创 2015-11-16 16:56:49 · 607 阅读 · 0 评论 -
linux 进度条显示函数
源代码如下:#include #include typedef struct { int progress; //进度条的百分比 int cur; //当前已经完成的部分 int len; //进度条的总长度}BAR;void displayProgress(BAR bar){ int原创 2015-09-24 16:38:30 · 849 阅读 · 0 评论 -
编写 pwd
程序思路:读取当前目录、一个目录接着一个目录地沿着树向上追踪,每步查看当前目录的i节点号,然后在父目录查找该i节点号的名字(目录名),直到到达目录树的顶端。程序步骤: 得到当前目录(.目录)的i节点号。(该 i节点号称为 n) 切换到当前目录的父目录(..目录)。 找到i节点号n链接的目录名。重复以上步骤,直到达到目录树。 判断是否到达目录树原创 2015-10-12 10:29:05 · 571 阅读 · 0 评论 -
关于程序运行时加载动态库失败的解决方法
错误提示如下:error while loading shared libraries: libjson.so.0: cannot open shared object file: No such file or directory原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。另外一个原因就是已经安装了原创 2015-10-12 11:37:59 · 18077 阅读 · 0 评论 -
linux c 字符判断函数
int isalnum(int c);检查字符是否为英文或数字。若参数c为字母或数字,则返回TRUE,否则返回NULL(0)。int isalpha(int c); 检查参数c是否为英文字母。若参数c为英文字母,则返回TRUE,否则返回NULL(0)。int isascii(int c); 检查参数c是否为ASCII码字符,也就是判断c的范围是否在0到127原创 2015-09-22 19:57:20 · 2546 阅读 · 0 评论 -
linux c 生成八位的随机密码
#include #include #include #include #include char pool[] = { '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','原创 2015-09-22 21:06:43 · 1622 阅读 · 0 评论 -
linux c 实现字符串替换
实现如下:#include#include/* str_find 被搜索的字符串 str_src 要查找的值 str_des 替换 str_find 中的值的值*/int str_replace(char* str_find,char* str_src, char* str_des){ char *ptr=NULL; char buff[1024];原创 2015-10-26 16:54:02 · 2232 阅读 · 0 评论 -
linux c 字符串处理API
原创 2015-09-21 23:46:35 · 1098 阅读 · 0 评论 -
linux c 使用正则表达式
C 语言处理正则表达式常用的函数有 regcomp()、regexec()、regfree()、regerror(),一般分为三个步骤,如下所示:编译正则表达式 regcomp()匹配正则表达式 regexec()释放正则表达式 regfree()函数原型int regcomp(regex_t *preg, const char *regex, int cflags);函原创 2015-09-18 17:07:23 · 633 阅读 · 0 评论 -
使用 shell 加载配置文件
原理就是把配置文件加载到环境变量(不是全局的环境变量,只是一个子shell的环境变量)。常规的配置文件格式一般为"key"="value"这种格式。类似shell中的变量赋值,如果在这个语句前面加上关键字 export 就可以声明这个变量为当前 shell 的环境变量(注意,不是全局的那种哦),然后在 C 程序中使用 getenv() 函数获取这个环境变量即可。简单的实现如下:(实际过程中,需要另原创 2015-09-08 10:34:55 · 4313 阅读 · 0 评论 -
linux syslog 调用接口
在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用syslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进行记录,也就是说要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。因此,下面将详细介绍如何通过syslog日志系统提供的API调用接口,来使用程序实现对syslog的使用。主要涉及原创 2015-09-07 11:40:23 · 5566 阅读 · 0 评论 -
linux c 获取文件行数
源代码如下:/*获取文件行数*/int file_wc(const char *filename){ int fd; register int linect = 0; char buf[MAXBSTZE]; int len; char *p = NULL; if(filename) {原创 2015-07-18 20:03:08 · 6124 阅读 · 1 评论 -
linux c 获取网卡状态(UP or DOWN)
源码如下:#include <sys/socket.h>#include <sys/ioctl.h>#include <linux/if.h>#include <string.h>#include <stdio.h>char *net_detect(char* net_name){ int skfd = 0; struct ifreq ifr;原创 2015-07-18 17:01:27 · 10387 阅读 · 0 评论 -
linux c 获取当前运行进程总数
获取当前运行进程总数的命令为: ps auxw | wc -l获取当前运行进程总数的源码如下:#include <stdio.h>#include <stdlib.h>#include <dirent.h>#include <string.h>#include <ctype.h>#include <errno.h>int main(int argc, char *argv[]){原创 2015-07-25 10:13:28 · 5166 阅读 · 0 评论