`
nanapoleon
  • 浏览: 48182 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Linux系统编程开篇

c 
阅读更多
        早都说过要在系统层看看写写了,不过以前真的没搞过这方面的东西,实在是不知道怎么搞。和java一提笔就知道要写什么差了很多。所以,似乎前两周都是看了看书,找找感觉,根本不清楚有什么可以写出来的。好吧,其实,我现在也是不知道写什么,还是没有入门啊,魂淡。
        先来点简单的吧,然后由浅入深。这次写的都是些简单的概念,懂行的童鞋请直接忽视,谢谢。
        系统编程,位于低层,它直接和内核以及核心系统链接库(core system library)交互。系统软件包括你的shell、编译器和调试器、核心实用程序(core utility)、文本编辑器以及系统守护进程(system daemon)。这些组件全部都是基于内核和C链接库的系统软件。血多其他的软件(例如高级GUI应用程序)大多位于高层,只会偶尔进入低层。有些程序设计者会全部投入系统软件的编写,有些只花部分的时间在此。当然,不管哪种,这部分都是整个编写软件的中心。
上面提到的概念,其实很多只是听过,并不是很了解,不过后面肯定会一个一个攻破,真正理解它们。
        系统编程,要从系统调用(system call)开始。系统调用(syscalls简写)其实也就是函数调用(function invocation),从用户空间(文本编辑器,游戏程序等)进入内核(系统调用的基础组件),以便向操作系统请求特定的服务或资源。系统调用的范围从常见的read()和write()到少见的get_thread_area()和set_tid_address()都涵盖在内。
        Linux所实现的系统调用要少于其他操作系统的内核。如linux的i386架构的系统调用大约有300个,而windows据说有上千个。不过,系统调用中有绝大部分(超过90%)是所有架构都会实现的。
        C链接库(libc)是Unix应用程序的中心组建。即使你是以其他语言进行编程,C链接库也能排上用场,通过较高层次链接库的包装,C链接库可以提供核心服务(core service)以及简化系统调用调用。在现代的Linux系统上,C链接库提供自GNU libc,简写为glibc。(貌似更显是系统调用的再上一层了)
        在Linux中,标准的C编译器提供自GNU Compiler Collection(gcc).在linux中,所使用的编译器和系统编程有密切的关系,因为编译器会协助实现C标准和以及系统ABI。
        好了,介绍了这么多概念,就不往下继续介绍了,以后想回顾的时候,在写一些吧。文章收尾,得来点硬货,上点代码吧。
        文章第一章,介绍的是文件I/O。先看看linux下的文件吧。一个文件必须先打开,才可以对他进行读写操作。内核为每一个进程维护一个已打开文件的列表,称为文件列表(file table)。此表是通过对一个非负整数被索引,而这个非负整数被称为文件描述符(file descriptor)。看到了吗,其实java上层的东西也都源于这里,fd在java中也是很常用的。每个Linux进程对文件的打开数都有限制,默认情况下,为1024个,可以最大到1048576。这里可以看到,在android编程中,我们会有碰到过文件打开数超出上限的错误,就是因为这个值的问题,在实际中,应该适当调大,以免程序出问题。(这么一会,就碰到了两个以前比较不清楚出处的地方,看来系统编程真的有很大得可学性!)
        来看看函数,open系统调用:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcnt1.h>

int open(const char *name, int flags);
int open(const char *name, int flags, mode_t mode);

这里mode有很多常见的:O_APPEND, O_WRONLY等。
举个例子:
int fd;
fd = open("/home/teach/pearl", O_WRONLY | O_TRUNC);
if(fd == -1)
/* 错误 */ 

        上面程序代码,会打开/home/teach/pearl以便进行读写,如果文件存在,则将它截短成零长度。因为没有指定O_CREATE标志,文件如果不存在,则open调用会失败。
        所以,想O_TRUNC这个参数,就比先对文件清理,然后再写就快很多。
分享到:
评论

相关推荐

    linux系统编程 中文版.pdf

    根据提供的文件信息,“linux系统编程 中文版.pdf”是一本专注于Linux系统编程的书籍,它不仅涉及了Linux系统编程的基本概念和技术,还深入探讨了一系列具体的编程接口和实践案例。下面是对该书中部分重要知识点的...

    linux 系统编程(英文原版)

    - **操作系统与Linux**:本书开篇首先介绍了操作系统的概念以及Linux作为一款开源操作系统的重要性。Linux以其强大的功能、高度的安全性和稳定性,在服务器领域占据主导地位。 - **系统调用**:详细解释了系统调用的...

    LINUX网络编程(很好)

    - **Linux的发展**:详细探讨了Linux操作系统的诞生和发展历程,包括Linus Torvalds如何在1991年发布了第一个Linux内核版本,以及GNU项目对Linux生态系统的重要贡献。 - **Linux的特色**:强调了Linux作为免费开源...

    linux高级编程

    本书开篇即引领读者进入Linux编程的世界,介绍了如何设置工作环境,包括必要的开发工具和环境配置,为后续深入学习奠定基础。 #### 2. 编写优秀的GNU/Linux软件 这一章节聚焦于软件工程的最佳实践,强调了在Linux...

    Linux_C编程一站式学习

    书的开篇首先介绍Linux操作系统的基本概念,包括程序的基本概念、数学函数、自定义函数以及函数的参数传递等基础知识。作者将带领读者从“HelloWorld”程序开始,逐步深入到变量、常量、表达式、控制流语句(if、...

    《Linux操作系统应用》课程教学大纲宣贯.pdf

    Linux操作系统的安装和基本配置是课程的开篇部分,包括Linux对系统的要求、安装前的准备、安装的详细过程、系统的基本配置等。通过学习,学生应能掌握Linux的安装和基本配置,了解Linux对系统的要求,掌握对硬盘的...

    Beginning Linux Programming, 4th Edition

    这本书是Linux编程领域的重要参考资料,旨在帮助读者理解Linux操作系统的基础以及如何在该平台上进行有效的程序开发。 1. **Linux操作系统基础**:书中的开篇会介绍Linux的历史、哲学以及它与Unix的关系,让读者对...

    史上最强的嵌入式底层驱动开发课程 Linux系统开发+Linux高级程序+主板开发+ARM等

    ├&lt;1 Linux操作系统基础&gt; │ ├01 - 说在前面的话1.mp4 │ ├02 - 说在前面的话2.mp4 │ ├03 - 说在前面的话3.mp4 │ ├04 - 说在前面的话4.mp4 │ ├05 - 计算机组成原理概述1 .mp4 │ ├06 - 计算机组成原理概述2...

    The Linux Programmer’s Toolbox.pdf

    - **Linux编程实例教程**:Arnold Robbins编著,从实战角度出发,教授Linux环境下的程序设计。 - **Linux内核指南:自顶向下的方法(针对x86和PowerPC架构)**:Claudia Salzberg、Gordon Fischer和Steven Smolski...

    Professional Linux Kernel Architecture.pdf

    - **核心概念**:本书开篇介绍了Linux内核的基本概念以及它在整个操作系统中的作用。 - **整体架构**:阐述了Linux内核的设计思想与架构特点,为后续章节的学习奠定基础。 #### 二、进程管理与调度(第二章) - **...

    UNIX环境高级编程_第二版中文

    相信知道这本书的人很多,这是讲解Unix编程的经典书籍,由于Linux属于类Unix系统,所以,学习Linux编程,这本书不可以少。 这本书的开篇首先讲的是对文本文件的操作,对了,就是那几个我们常常看见的函数--open,...

    韩顺平linux.doc

    1. **开篇介绍**:第一讲通常会涵盖Linux的发展历程,解释为何选择学习Linux,以及Linux与Windows、Mac OS等其他操作系统的主要区别。 2. **基础介绍**:第二讲可能涉及Linux的历史和vi编辑器的使用。vi是Linux中的...

    Linux programming

    本书开篇介绍了Linux的基本概念和发展历史,并概述了Linux编程的基础知识,包括如何安装和配置开发环境。这一章节对于初学者来说至关重要,因为它帮助读者快速熟悉Linux操作系统的核心特性及其编程环境。 #### 第2...

Global site tag (gtag.js) - Google Analytics