作业1
题目
结果
代码
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
int fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, 0666);
// 父进程
char buf[64];
while (1) {
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf));
if (strncmp(buf, "quit", 4) == 0)
break;
buf[strlen(buf) - 1] = '\t';
write(fd, buf, strlen(buf));
// 每次写完开启一个子进程读取一遍文件
pid_t pid = fork();
if (pid < 0) {
perror("fork()");
return -1;
}
// 子进程
if (pid == 0) {
usleep(200);
char ch;
int offset;
lseek(fd, 0, SEEK_SET);
strcpy(buf, "文件内容:");
write(STDOUT_FILENO, buf, strlen(buf));
while (1) {
offset = read(fd, &ch, sizeof(char));
if (offset == 0) {
ch = '\n';
write(STDOUT_FILENO, &ch, sizeof(char));
break;
}
write(STDOUT_FILENO, &ch, sizeof(char));
}
}
}
fclose(fd);
return 0;
}
作业2
题目
结果
代码
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
int fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, 0666);
char buf[64];
while (1) {
fgets(buf, sizeof(buf), stdin);
char str[32] = "子进程:";
write(fd,str,strlen(str));
write(fd,buf,strlen(buf));
lseek(fd,0,SEEK_SET);
fflush(stdin);
if (strncmp(buf, "quit", 4) == 0)
break;
pid_t pid = fork();
if (pid < 0) {
perror("fork()");
return -1;
}
// 子进程
if (pid == 0) {
char ch;
int offset;
while (1) {
offset = read(fd, &ch, sizeof(char));
if (offset == 0) {
break;
}
if (strncmp(buf,"0",1) == 0)
continue;
if (strncmp(buf,"quit",4) == 0)
break;
write(STDOUT_FILENO, &ch, sizeof(char));
}
}
}
close(fd);
return 0;
}