2014025663《嵌入式系统程序设计》第五周学习总结

本周学习了fopen,fread,fclose,fwrite

1.作用

  读写文件数据块。

2.函数原型

  (1)size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

     其中,ptr:指向保存结果的指针;size:每个数据类型的大小;count:数据的个数;stream:文件指针

     函数返回读取数据的个数。

  (2)size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

       其中,ptr:指向保存数据的指针;size:每个数据类型的大小;count:数据的个数;stream:文件指针

     函数返回写入数据的个数。

3.注意

  (1)写操作fwrite()后必须关闭流fclose()。

  (2)不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

 

 执行结果:

 

建立一个子进程。所建立的子进程PID 和 PPID不同于其父进程,同时资源使用被设置为0,文件锁和挂起的信号不被继承。
Linux内部,fork的执行使用copy-on-write页面,所以耗费的资源只是拷贝父进程页表,建立唯一子进程task结构体的时间和内存。
用法: 
#include <sys/types.h>
#include <unistd.h>
 
pid_t fork(void);
 
返回说明:  
成功执行时,在父进程的线程执行中返回子进程PID,在子进程的线程执行中返回0。失败时在父进程的语境中返回-1,errno被设为以下的某个值  
EAGAIN:
1.不能为拷贝父进程的页表和子进程的task结构分配足够的内存
2.不可能再建立新的子进程,因为调用者已达到RLIMIT_NPROC的资源限制,除了调用进程有CAP_SYS_ADMIN 或 CAP_SYS_RESOURCE的权限
ENOMEM:内核内存不足,无法分配必须的数据结构
 
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
 
int main(void)
{
 pid_t pid;
 printf("Before fork .../n");
 
 switch(pid = fork()) {
 case -1:
   printf("Fock call fail/n");
   exit(1);
  
 case 0:
   printf("The pid of child is: %d/n", getpid());
   printf("The pid of child's parent is: %d/n", getppid());
   printf("Child exiting.../n");
   exit(0);
 
 default:
   printf("The pid of parent is: %d/n", getpid());
   printf("the pid of parent's child is: %d/n", pid);
 }
 printf("After fork, program exiting.../n");
 exit(0);
}
 
unix/linux管道通信相关函数
  程序中有如下Linux系统调用:   (1) fork( ):创建一个进程。 返回值:-1:创建子进程失败。 0 :子进程得到的返回值。 >0:父进程得到的返回值,表示子进程号(pid)。 创建子进程后,父、子进程执行同一个程序段,但有不同的数据区,子进程继 承父进程的资源。   (2) exit( ):撤消进程。 若父进程因wait()而睡眠,则唤醒父进程。exit()撤消子进程时必须通知父 进程。   (3) pipe(fd):创建一个管道. fd[0]为管道的读端,fd[1]为管道的写端。管道用来实现父进程与其子孙进程 之间的通信,以FIFO方式传送消息。   (4) wait():父进程等待子进程撤销。 若子进程尚未撤销,父进程睡眠等待,子进程撤销时,将其唤醒,若子进程已撤 销,父进程不睡眠等待。)   (5) Sleep(n):进程睡眠等待 n 秒,交出处理机控制权。
posted @ 2017-05-21 15:24  王雨淳  阅读(128)  评论(0编辑  收藏  举报