第一题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t; int main(int argc, const char *argv[])
{
pid_t pid;
FILE *file;
char input[100];
// 创建父进程和子进程
pid = fork();
if (pid < 0) {
// fork 错误处理
perror("fork failed");
return 1;
}
// 父进程
if (pid > 0) {
// 打开文件以写入
file = fopen("data.txt", "w");
if (!file) {
perror("Failed to open file for writing");
return 1;
}
printf("请输入数据: ");
fgets(input, sizeof(input), stdin);
fprintf(file, "%s", input);
fclose(file);
// 等待子进程结束
wait(NULL);
}
// 子进程
else {
// 确保父进程完成写入
sleep(1); // 假设写入时间
// 打开文件以读取
file = fopen("data.txt", "r");
if (!file) {
perror("Failed to open file for reading");
return 1;
}
char output[100];
printf("从文件读取的数据: ");
while (fgets(output, sizeof(output), file) != NULL) {
printf("%s", output);
}
fclose(file);
}
return 0;
}
第二题