编写一个打开文件的程序(使用open()系统调用) 然后调用fork()创建一个新进程。设计实验回答以下问

大学网课 已帮助 人

编写一个打开文件的程序(使用open()系统调用),然后调用fork()创建一个新进程。设计实验回答以下问题: w子进程和父进程都可以访问open()返回的文件描述符吗? w当它们并发写入文件时(使用write()系统调用),会发生什么? w如何保证子进程始终先打印?你能否不在父进程调用wait()而做到这一点呢? w在父进程中使用wait(),等待子进程完成。wait()返回什么?如果你在子进程中使用wait()会发生什么? 提示: 1)可能用到的头文件 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <fcntl.h> #include <string.h> 2)open()系统调用的例子: int fid; fid = open(“./out”, O_CREAT | O_WRONL

编写一个打开文件的程序(使用open()系统调用) 然后调用fork()创建一个新进程。设计实验回答以下问

热搜:汇编程序是指由汇编语言编写的程序

回答

共1条回复

  • #INCLUDE &LT;STDIO.H&GT;#INCLUDE &LT;STDLIB.H&GT;#INCLUDE &LT;UNISTD.H&GT;#INCLUDE &LT;FCNTL.H&GT;#INCLUDE &LT;STRING.H&GT;INT MAIN(){ INT FD = 0; //路径中的目录若不存在将导致文件创建失败 CHAR FILENAME[20] = &QUOT;/HOME/ITHEIMA/A.TXT&QUOT;; //打开文件 FD = OPEN(FILENAME, O_RDWR | O_EXCL | O_TRUNC, S_IRWXG); IF (FD == -1){ //判断文件是否成功打开 PERROR(&QUOT;FILE OPEN ERROR.N&QUOT;); EXIT(-1); } //写数据 INT LEN = 0; CHAR BUF[100] = { 0 }; SCANF(&QUOT;%S&QUOT;, BUF); LEN = STRLEN(BUF); WRITE(FD, BUF, LEN); CLOSE(FD); //关闭文件 PRINTF(&QUOT;---------------------N&QUOT;); //读取文件 FD = OPEN(FILENAME, O_RDONLY); //再次打开文件 IF (FD == -1){ PERROR(&QUOT;FILE OPEN ERROR.N&QUOT;); EXIT(-1); } OFF_T F_SIZE = 0; F_SIZE = LSEEK(FD, 0, SEEK_END); //获取文件长度 LSEEK(FD, 0, SEEK_SET); //设置文件读写位置 WHILE (LSEEK(FD, 0, SEEK_CUR) != F_SIZE) //读取文件 { READ(FD, BUF, 1024); PRINTF(&QUOT;%SN&QUOT;, BUF); } CLOSE(FD); RETURN 0;}