Linux复习(成熟期版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

前面的可能考选择题,填空题,全部题型如下:

一、选择题(10个题,每题2分,共20分)

二、填空题(10个空,每空2分,共20分)

三、程序阅读题(2道题,共20分)

四、程序注释(1道题,共20分)可能考I/O

五、编程题(1道题,共20分)

P 154 文件I/O操作open()、read()、write()、lseek()和close()

仔细阅读程序,能写注释或填空。

/* copy_file.c */

#include

#include

#include

#include

#include

#include

#define BUFFER_SIZE 1024/* 每次读写缓存大小1KB,关于《linux读写文件运行效率》的传送门*/

#define SRC_FILE_NAME "src_file" /* 源文件名,之后用SRC_FILE_NAME代替src_file */

#define DEST_FILE_NAME "dest_file" /* 目标文件名文件名,之后用DEST_FILE_NAME代替dest_file */ #define OFFSET 10240/* 复制的数据大小 1MB,也是lseek函数的偏移量*/

int main()

{

int src_file, dest_file; //定义了2个变量

unsigned char buff[BUFFER_SIZE]; //设定缓存的大小,定义为数组,存放读写缓存

int real_read_len;

/* 以只读方式打开源文件 */

src_file = open(SRC_FILE_NAME, O_RDONLY); //前面的src_file是变量名,成功时为3,失败时为-1 //也可以写成src_file = open("src_file", O_RDONLY);

/* 以只写方式打开目标文件,若此文件不存在则创建该文件, 访问权限值为644 */

dest_file = open(DEST_FILE_NAME, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

//前面的dest_file是变量名,成功时为4,失败时为-1

//也可以写成 d est_file = open("dest_file",O_WRONLY|O_CREAT,644);

if (src_file < 0 || dest_file < 0) //打开文件失败时

{

printf("Open file error\n"); //输出这句话

exit(1); // exit()中,1是返回给操作系统的,0是正常退出

}

/* 将源文件的读写指针移到最后10KB的起始位置*/

lseek(src_file, -OFFSET, SEEK_END); //从文件的结尾处向前移动10KB

// OFFSET 是偏移量,正值向前移,负值向后移。这里在 OFFSET 前加了负号。

// SEEK_END 表示从文件的结尾开始。

//也可以写成lseek("src_file", -10240, SEEK_END);

/* 读取源文件的最后10KB数据并写到目标文件中,每次读写1KB */

while ((real_read_len = read(src_file, buff, sizeof(buff))) > 0)//读取成功时返回读到的字节数//红字部分也可以写成 read("src_file", buff, 1024)

{

write(dest_file, buff, real_read_len);

// real_read_len 在上一步被赋值为 1KB,即real_read_len = 1024;

//也可以写成write("src_file", buff, 1024)

close(dest_file); //关闭文件,这里等同于close(4);

close(src_file); //关闭文件,这里等同于close(3);

return 0; //main函数里,return 0 就是关闭程序。子程序里 return 为返回值。

}

P 214 子进程和父进程wait()和waitpid() 仔细阅读程序,能写注释或填空,写出输出结果。

wait()函数是用于使父进程阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。

如果该父进程没有子进程或者他的子进程已经结束,则wait()就会立即返回。

本例中首先使用fork()创建一个子进程,然后让其子进程暂停5s(使用了sleep()函数)。接下来对原有的父进程使用waitpid()函数,并使用参数WNOHANG 使该父进程不会阻塞。若有子进程退出,则waitpid()返回子进程号;若没有子进程退出,则waitpid()返回0,并且父进程每隔一秒循环判断一次。

该程序源代码如下所示:

/* waitpid.c */

#include

#include

#include

#include

#include

int main()

{

pid_t pc, pr;

pc = fork(); //使用fork()函数,创建了一个子进程,在子进程里pc = 0,在父进程里pc = 子进程的进程号。

//子进程和父进程是并行运行的,即同时运行。

//注意:是创建了一个子进程,不是一个子程序,也不是一个新程序。程序只有一个。

if (pc < 0)

{

printf("Error fork\n");

相关文档
最新文档