摘要:
今天起,开始学习linux系统编程中的另一个新的知识点----进程,在学习进程之前,有很多关于进程的概念需要了解,但是,概念是很枯燥的,也是让人很容易迷糊的,所以,先抛开这些抽象的概念,以实际编码来熟悉进程到底是个什么东东,这样学习起来要有兴趣一些,在学习一门技术时,找一种能提高自己兴趣的方法是很重... 阅读全文
摘要:
上一节中已经学习了文件描述符的复制,复制方法有三种,其中最后一种fcntl还并未使用到,关于这个函数,不光只有复制文件描述符的功能,还有其它一些用法,本节就对其进行一一剖析: fcntl常用操作: 这里,我们将上节当中用dup或dup2实现复制文件描述符改用fcntl,程序如下: 先将tes... 阅读全文
摘要:
今天继续学习文件与io,主要是学习文件共享及文件、复制文件描述符,有点抽象,主要是概念上的理解,但是很重要,下面一一来分解: 文件共享: 回顾一下,在linux系统调用中,是通过文件描述符来访问文件的,文件描述符是一个非负的整数,这是站在用户的观点来看的,实际上在linux内核上是有一定的数据结构来... 阅读全文
摘要:
上次我们利用文件的read和write来实现了简易的cp命令,其中将源文件拷贝到目标文件时,我们给目标文件的权限是写死的,而非根据源文件的权限生成的,如下: 今天就来解决这个问题,来学习获取文件权限相关的函数,言归正传,正入正题。 stat:功能:读取文件元数据 关于stat结构体的结构如下... 阅读全文
摘要:
今天继续学习文件与io,话不多说,开始进入正题: 文件的read和write系统调用: 说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型: 下面以一个实现文件简单拷贝的示例(类似于cp命令,但是没cp命令强大),来对其文件的读写有个感性的认识: #include... 阅读全文
摘要:
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自己亲自验证过的,我机智不算聪明,所以也没必要去校仿那些“大脑非常聪明”的理解能力很强的“高人”,也许... 阅读全文
摘要:
今天接着对链表进行进一步完善,对于上节中已经实现了对节点的删除操作,这次对这个操作进行升级,符合条件的都可以被删除(通过函数指针来实现),具体实现如下:list.c:#ifndef _LIST_H_#define _LIST_H_#include typedef struct node{ int data; struct node* next;} node_t;typedef void (*FUNC)(node_t*);typedef int (*FUNC2)(node_t*);//这个是用来判断是否节点符合条件的node_t* list_insert_front(node_t* ... 阅读全文
摘要:
今天继续完善自己的链表,上次已经实现了链表的插入、遍历、销毁方法,对于链表的插入,我们上次是在头结点进行插入的,这次,我们来实现一个在任意结点进行插入的方法。实现链表的另外一种插入方法----在任意位置进行插入:在实现它之前,先实现获取任意位置的结点的函数,为便在实现任意插入时会使用到它,先在头文件中定义:list.h:#ifndef _LIST_H_#define _LIST_H_#include typedef struct node{ int data; struct node* next;} node_t;typedef void (*FUNC)(node_t*);node... 阅读全文
摘要:
在于C语言指针的相关知识点算是已经学得差不多了,当然,语言的学习是一个终生的,所以还需慢慢去学习,今天就以一个非常经典,也是体现指针应用的一个例子,来操作练一下所学的指针相关的知识点-----链表对于链表,我想学过编程的应该都对它有比较清楚的了解,下面简单对它进行回顾一下:链表的基本操作:下面自己动手利用指针的知识一点一点来实现链表,同时学习一下C语言多文件的编译风格:第一步:搭建好基础开发框架:首先需要定义一个结构体,来代表一个结点,结点里面的数据域和指针域两个构成,将其定义放到头文件(.h)中【至于放到.h头中的好处,请参考http://www.cnblogs.com/webor2006/ 阅读全文
摘要:
今天继续对指针进行探讨,请看下面:函数指针:下面通过一个程序,简单明了的对函数指针有个基本认识:#include void test(int n){ printf("test %d ...\n", n);}int main(void){ void (*f)(int); // 这里的f就是函数指针变量 void (*f2)(int); // 这里的f就是函数指针变量 // 以下两种写法是等价的 f = &test; f2 = test; // 以下两种写法也是等价的 f(100); // 调用函数 (*f2)(200); ... 阅读全文