随笔分类 - linux系统编程

摘要:本节目标: 什么是程序 什么是进程 进程数据结构 进程与程序区别与联系 一,什么是程序? 程序是完成特定任务的一系列指令集合 二,什么是进程? 从用户的角度来看进程是程序的一次动态执行过程 从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。 进程是资源分配的最小单位 每一个进程都有自己独立的地址空间与执... 阅读全文
posted @ 2013-07-12 09:45 mickole 阅读(3035) 评论(0) 推荐(2) 编辑
摘要:本节目标:1,文件共享打开文件内核数据结构一个进程两次打开同一个文件两个进程打开同一个文件2,复制文件描述符(dup、dup2、fcntl)一,文件共享1,一个进程打开两个文件内核数据结构说明:文件描述符表:每个进程都有一张,彼此独立,每个文件描述符表项都指向一个文件表,文件描述符0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),默认已经打开,分别表示:标准输入,标准输出,标准错误设备。文件表:每打开一个文件就对应一张文件表,文件表可以共享,当多个文件描述符指向同一个文件表时,文件表中的refcnt字段会相应变化。文件状态标识:文件的打开模式( 阅读全文
posted @ 2013-07-11 16:40 mickole 阅读(1631) 评论(0) 推荐(0) 编辑
摘要:从系统时钟获取时间方式time函数介绍:1、函数名称: localtime2、函数名称: asctime3、函数名称: ctime4、函数名称: difftime5、函数名称: gmtime6、函数名称: time7、函数名称: tzsettime.h是C/C++中的日期和时间头文件。代码示例# include #include int main(void){time_t timer =time(NULL);printf("ctime is %s\n",ctime(&timer)); //得到日历时间return 0;}从系统时钟获取时间方式time_t time( 阅读全文
posted @ 2013-07-11 00:50 mickole 阅读(743) 评论(0) 推荐(0) 编辑
摘要:本文利用以下系统调用实现ls -l命令的功能:1,lstat:获得文件状态,2,getpwuid:#include struct passwd *getpwuid(uid_t uid);描述:The getpwuid() function returns a pointer to a structure containing the broken-out fields of the record in the password database that matches the user ID uid.返回值: The passwd structure is defined in as fo. 阅读全文
posted @ 2013-07-10 22:21 mickole 阅读(2617) 评论(0) 推荐(0) 编辑
摘要:一、stat()获取文件元数据stat系统调用原型: #include int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf);帮助信息可通过:man 2 stat 查看DESCRIPTION These functions return information about a file. No permissions are required on the file i... 阅读全文
posted @ 2013-07-10 17:04 mickole 阅读(2109) 评论(0) 推荐(0) 编辑
摘要:1. 目录操作相关的系统调用 1.1 mkdir和rmdir系统调用 1.1.1 实例 1.2 chdir, getcwd系统调用 1.2.1 实例 1.3 opendir, closedir, readdir, 1.3.1 实例:递归便利目录 1. 目录操作相关的系统调用 1.1 mkdir和rmdir系统调用 [code] filename: mk_rm_dir.c #include int mkdir(const char *path, mode_t mode); return: S 0 ... 阅读全文
posted @ 2013-07-10 15:07 mickole 阅读(1363) 评论(0) 推荐(0) 编辑
摘要:一、lseek()系统调用功能说明:通过指定相对于开始位置、当前位置或末尾位置的字节数来重定位 curp,这取决于 lseek() 函数中指定的位置函数原型:#include #include off_t lseek(int fd, off_t offset, int whence);参数说明:fd:文件描述符offset:偏移量,该值可正可负,负值为向前移whence:搜索的起始位置,有三个选项:(1).SEEK_SET: 当前位置为文件的开头,新位置为偏移量大小 (2).SEEK_CUR: 当前位置为文件指针位置,新位置为当前位置加上偏移量大小 (3).SEEK_END: 当... 阅读全文
posted @ 2013-07-10 13:45 mickole 阅读(2561) 评论(1) 推荐(0) 编辑
摘要:read系统调用一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节函数原型:#include ssize_t read(int fd, void *buf, size_t count);参数fd :想要读的文件的文件描述符buf : 指向内存块的指针,从文件中读取来的字节放到这个内存块中count : 从该文件复制到buf中的字节个数返回值如果出现错误,返回-1读文件结束,返回0否则返回从该文件复制到规定的缓冲区中的字节数否则返回从该文件复制到规定的缓冲区中的字节数write系统调用用write() 阅读全文
posted @ 2013-07-10 00:04 mickole 阅读(2621) 评论(0) 推荐(0) 编辑
摘要:1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。errno这个全局变量在头文件中声明如下:extern int errno;errno是一个由POSIX和ISO C标准定义的符号,看(用)起来就好像是一个整形变量。当系统调用或库函数发生错误的时候,比如以只读方式打开一个不存在的文件时,它的值将会被改变,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。为什么,要强调errno看起来好像是一个整形变量呢?因为有的标准(如ISO C)只规定了errno的作用,而没有规定它的实现方式,它可能被定义成一个变量,也有可能被定义成一个宏,这个 阅读全文
posted @ 2013-07-09 23:16 mickole 阅读(6800) 评论(1) 推荐(3) 编辑
摘要:什么是IO?输入/输出是主存和外部设备之间拷贝数据的过程 设备->内存(输入操作) 内存->设备(输出操作)高级I/O ANSI C提供的标准I/O库称为高级I/O,通常也称为带缓冲的I/O低级I/O 通常也称为不带缓冲的I/O2. 文件描述符:fd对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息。一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOU 阅读全文
posted @ 2013-07-09 23:09 mickole 阅读(4757) 评论(1) 推荐(3) 编辑