write()和read()二进制数与进程

时间:2017-04-03 16:48:02

标签: c process file-descriptor

我正在做这个功课一段时间,这让我很头疼。

编写一个程序,将整数“i + 1”写入MAXBUF表的元素“i”中 整数(表格的每个元素)。 MAXBUF最初应该在源代码中为“#define”d为10 程序代码。然后,只使用一个write()操作,程序应该写入整个 二进制格式的整数表到最初被截断的文件,名为“filetable.bin”。下一个 步骤程序应该创建一个子进程,然后打印消息“父进程 正在终止。“然后退出。子进程应以二进制格式单独读取 文件中存储的每个整数与整数的顺序相同,并打印出每个整数 整数到标准输出。在程序的最后一步,子进程应该等待它 父进程终止,然后打印到标准输出消息“子进程 正在终止。“,然后终止。 “filetable.bin”文件中的所有操作都应该是 使用系统调用执行。

#include <fcntl.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#define MAXBUF 10

int decimalToBinary(int n);

int main(int argc, char *argv []) {

int i, fd, n, status, childpid;
char buffer[MAXBUF];
pid_t pid = (long)getpid();

fd = open("filetable.bin", O_CREAT | O_RDWR);

for(i=0; i<MAXBUF; i++) {
  n=i+1;    
  buffer[i] = decimalToBinary(n);
}

write(fd,buffer,sizeof(buffer));

childpid = fork();

if(childpid >0) {
  printf("The parent process terminating.\n");
  exit(0); // or kill(pid, SIGKILL)
}
if(childpid < 0) {
  perror("Failed to fork\n");
 }
 else {
  read(fd,&childpid,sizeof(childpid)); 
  write(STDOUT_FILENO,&childpid,sizeof(childpid)); 

  wait(&status); 
  printf("The child process is terminating\n"); 
  exit(1);
 }
 return(0);
}

int decimalToBinary(int n) {

  int remainder, binary=0, i=1;

  while(n!=0) {
    remainder = n%2;
    n = n/2;
    binary = binary + (remainder*i);
    i = i*10;
  }
  return binary;
}

我的问题是如何从childpid读取并在STDOUT中用它写?

编辑:它出现在输出中:&#34;父进程正在终止\ n&#34; &#34;子进程正在终止\ n&#34;。它错过了STDOUT

0 个答案:

没有答案
相关问题