摘要:
临时文件通常,程序需要以文件的形式使用临时存储。这也许是存储计算的中间结果,或者是在实际操作之前所做的文件拷贝备份。例如,一个数据程序在删除记录时会使用临时文件。文件会收集需要保存的数据库实体,然后在操作结束时,临时文件会成为新的数据库而原始的会被删除。临时文件的大量使用隐藏了他的一个缺点。我们必须小心来确保程序会选择一个唯一的名字来使用临时文件。如果不是这样,因为Linux是一个多任务系统,也许会有另一个程序选择了相同的名字,而这两个彼此之间会相互影响。一个唯一的临时文件名可以由tmpnam函数生成:#include <stdio.h>char *tmpnam(char *s); 阅读全文
摘要:
早上起来登陆Blog空间,发现以前显示很好的模板现在却显示得乱乱的,还以为是自己浏览器出了问题,加上那个上下滚动的软件交易列表,真是出奇的烦。登陆Blog后台管理,发现后台管理的界面也和以前大不一样了。幸好在顶部看见有私信一项,点开一看,才发现原来CSDN的个人空间和Blog都进行了改版。正如其消息通知中所说,现在社会网络SNS是网络发展的大趋势,国外的Facebook不需多说,就是国内的校内网等的发展也是如火如荼,所以在这样的背景下CSDN的个人空间和Blog也进行改版,还有不论评论如何,这是勇敢走出的第一步等语。话说回来,第一次看到新版的显示效果还真是有种惊艳的感觉,并不是说有多好,而是显 阅读全文
摘要:
时间与日期通常对于一个程序来说可以确定时间与日期是十分用的。也许他要记录其运行的时间,或者是他要一个特定的时间改变其形为。例如,一个游戏程序也许不会在工作时间运行,或者是一个备份调度会在启动自动备份之前等待早些的工作完成。所有的Unix系统对于时间与日期都使用相同的起始点:1970年1月1日午午夜GMT。这是Unix的创世纪,而Linux也不例外。而在Linux系统中所有的时间都是以秒记量的。这与MS-DOS处理时间的方式相似,所不同是MS-DOS是由1980年开始的。其他的系统使用其他的记时起始时间。时间是使用一个定义的time_t类型来处理。这是一个足够大的整数类型来包含以秒计的日期与时间 阅读全文
摘要:
环境变量我们在第2章讨论了环境变量。这些变量可以用来控制shell脚本和其他程序的形为。我们也可以使用他们来配置用户环境。例如,每一个用户都有一个环境变量,HOME,定义了其用户主目录,作为其会话的起始位置。正如我们所知的,我们由shell提示来测试环境变量:$ echo $HOME/home/neil我们也可以使用shell的set命令来列出所有的环境变量。Unix描述定义了许多标准的环境变量用于各种目的,包括终端类型,默认编辑器,时区,等等。一个C程序可以使用putenv与getenv函数来访问环境变量。#include <stdlib.h>char *getenv(const 阅读全文
摘要:
当我们为Linux编写程序时,我们必须考虑到程序会运行在多任务环境下。这就意味着多个程序会同时运行,并且共享机器资源,例如内存,磁盘空间以及CPU周期。也许在同一时刻会一个程序多个实例在运行。这时最为重要的就是这些程序之间不会相互影响,彼此清楚其周边环境,同时也要正确的运行以避免冲突,例如与另一个程序同时试着写入相同的文件等。在这一章,我们将会讨论程序执行的环境,他们如何使用环境来得到有关操作环境的信息,以及这些程序用户如何改变其行为。具体的说,我们会讨论下面内容:向程序传递参数环境变量查看时间信息临时文件得到用户以及主机的信息记录以及配置日志消息发现系统的限制程序参数当一个使用C语言编写的L 阅读全文
摘要:
mkdir和rmdir我们可以使用mkdir和rmdir来创建和移除目录.其语法如下:#include <sys/stat.h>int mkdir(const char *path, mode_t mode);mkdir系统调用可以用来创建目录,而这是与mkdir程序相等同的.mkdir以path为名字创建一个新的目录.目录的权限是由参数mode来指定的,而这也与open系统调用中的O_CREAT的选项是一样的,而且这也是要受到umask的影响.rmdir语法如下:#include <unistd.h>int rmdir(const char *path);rmdir系 阅读全文
摘要:
标准I/O库标准I/O库以及他的头文件,提供了一个到底层I/O系统调用的一个万能接口.这个库并不是ANSI标准C的一部分,而我们在前面所谈到的系统调用也不是,但是这个库却提供了许多复杂的函数用来处理格式化输出以及描述输入.他同时也会小心的处理设备所要求的缓冲区.在许多方式上,我们可以用使用低层文件描述符的方式来使用这个库.我们需要打开文件建立访问路径.这会返回一个值,并会作为一个调用其他I/O库函数的参数.这个与低层文件描述符等同的被称之类流(stream),并且是作为一个指向结构的指针,FILE*,来实现的.当一个程序启动时会自动打开三个文件流.他们是stdin,stdout,stderr. 阅读全文
摘要:
使用文件在这一部分当中,我们将会讨论Linux的文件以及目录以及如何来管理他们.我们将会学习创建文件,打开文件,读取文件,写入文件以及关闭文件.我们也将会学习程序如何来管理目录(例如创建,扫描,删除).在上一部分当中我们使用Shell进行编程,而现在我们要开始使用C编程.在讨论Linux处理文件I/O之前,我们将会看一些与文件,目录以及设备相关的概念.要处理文件与目录,我们需要使用系统调用(与Windows API相类似的Unix/Linux调用),但是也存在着一系列的库函数,标准I/O库(stdio),来使得我们的文件处理更为有效.在这里我们要将讨论处理文件和目录的各种调用,所以我们将会谈到 阅读全文
摘要:
通过昨天对已知技术的回顾,我们已经熟悉交互的使用。显示丰富格式的问题与列表,甚至是分页,并不足以使一个程序鲜活。而askeet概念的核心就是允许任何注册的用户询问一个新问题,而任何用户可以回答已存在的问题。现在是我们实现的时候了。添加一个新问题我们在第七天所创建的侧边栏已经包含一个添加新问题的链接。他链接到question/add动作,这正是我们将要开发的。限制到注册用户的访问首先,只有注册用户可以添加一个新问题。为了限制到question/add动作的访问,在askeet/apps/frontend/modules/question/config/目录下创建一个security.yml文件: 阅读全文
摘要:
回顾在我们第八天的学习中,我们很容易的为askeet添加了AJAX交互。现在程序已经相当有用了,但是还需要大量的小修改。在问题体中应允许丰富的文本,而主键不应出现在URI中。在Symfony中修正这些问题并不难,今天将是我们练习我们所学东西的一个好机会,并且可以检测我们是否已经知道如何操作MVC结构的所有层。在question与answer上允许丰富的文本格式Markdownquestion与answer现在只允许接受普通文本。要允许基本的格式,粗体,斜体,超链接,图片,等,我们将会使用一个外部库,而不是重新发明轮子。如果我们阅读过文本格式的Symfony文档,那么你也许知道我们是Markdo 阅读全文