while ((real_read_len = read(src_file, buff, sizeof(buff))) > 0) { write(dest_file, buff, real_read_len);
}
close(dest_file); close(src_file); return 0;
}
程序功能是:把源文件内容拷贝入目标文件。 2、 #include
#include
{ char *envp[]={\ if (fork() == 0)
{if (execle(\
{printf(\ }
}
}功能: 创建子进程,并在子进程使用系统调用,执行命令env
3、#include
}
else if (result == 0) { printf(\return value is %d\\nIn child process!!\\nMy is %d\\n\
} else {
printf(\return value is %d\\nIn father process!!\\nMy PID PID is %d\\n\
}
return result;
}功能:创建子进程,并分别在子/父进程中打印各自的进程ID号。 4、int lock_set(int fd, int type) {
struct flock old_lock, lock; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; lock.l_type = type; lock.l_pid = -1;
fcntl(fd, F_GETLK, &lock); if (lock.l_type != F_UNLCK) { }
if (lock.l_type == F_RDLCK) }
else if (lock.l_type == F_WRLCK) { }
printf(\
{
printf(\
lock.l_type = type;
if ((fcntl(fd, F_SETLKW, &lock)) < 0) {printf(\ }
switch(lock.l_type) {
case F_RDLCK:
{printf(\} break;
case F_WRLCK:
{printf(\} break; return 1;
} return 0;
case F_UNLCK:
{ printf(\ } break; default: break;
return 1;
}功能:根据传入的锁的类型和文件标识符,在指定文件上加锁。 5、#include
int main(void) {
pid_t result; result = fork(); if(result == -1) { }
else if (result == 0) { } else { }
return result; }
6、 #include
#include
(void) signal(SIGINT,fun_ctrl_c);
printf(\主程序:程序进入一个无限循环!\\n\
printf(\
printf(\
printf(\
}
while(1)
{ }
printf(\这是一个无限循环(要退出请按Ctrl+C键)!\\n\sleep(3);
exit(0);
void fun_ctrl_c() { } 功能:重新定义ctrl+c 信号处理函数,并给出相应的信息 printf(\你按了 Ctrl+C 哦:)\\n\
printf(\信号处理函数:有什么要处理,在处理函数中编程!\\n\printf(\此例不处理,重新恢复SIGINT信号的系统默认处理。\\n\(void) signal(SIGINT,SIG_DFL);
四、简答题。(任选2题,每题4分,共20分) 1、简述管态和目态的区别。 2、简述守护进程的c语言程序的主要步骤。 220页,做了的 3、一个项目中,文件的依赖关系如下所示,请写出该项目的makefile文件的内容。76页,不懂该如何写啊 l.c L:l.o v.0 D.o f.o Gcc l.o v.o d.o f.o –o l v.c D.c f.c l.o:l.c gcc –c l.c –o l.o v.o:v.c gcc –c v.c –o v.o D.o:D.c Gcc –c D.c –o D.o f.o:f.c gcc –c f.c –o f.o 4、exit()和_exit()的区别。 调用exit()函数时,缓冲区中的记录也能正常输出;调用_exit()函数无法输出缓冲区中的记录。 5、简述linux系统启动过程。 上电,进入实模式,进入CMOs或者bootloader bootsect阶段 setup阶段 head.S阶段 main.c阶段 6、是阐述在嵌入式平台上搭建交叉编译及其运行环境(解压)的步骤? 7、请给出LINUX系统下守护进程创建的主要步骤和相关C语言语句。
8、举例说明autotools自动生成makefile的过程。 9、9、拭举例说明使用fork()函数产生子进程的过程。(流程图) 五、程序设计已知一个程序的流程图如下左图所示,请给出它的源代码() 开始 fork() fork()返回值返回值>0 父进程调用 waitpid() waitpid()返回值 返回值<0(出错)返回值 = 子进程号 捕获子进程退出 结束返回值 = 0子进程暂停5s父进程暂停1s返回值 = 0子进程退出是准备工作:创建两个管道读文件描述符集合的重置Tmp_inset<-Inset开始Select:监视文件描述符集合的文件获得三个文件描述符(两个管道和标准输入)Select的返回管道1管道2标准输入初始化读文件描述符集合打印到屏幕上打印到屏幕上是否输入“q”?超时/出错开始有效的文件描述符存在?否结束是 fork()创建两个子进程子进程1父进程阻塞式等待子进程1的结束等待1s子进程2是否结束?运行(调用execlp()执行“ls -l”命令)是子进程2运行(调用sleep函数)结束