我正在做这个功课一段时间,这让我很头疼。
编写一个程序,将整数“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