1:创建一对父子进程 父进程负责:打开文件,向文件中写入键盘键入的数据 子进程负责:打开相同的文件,从文件中读取刚才键入的数据 注意:想办法保证先写入数据,后读取数据。
#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, char const *argv[])
{
pid_t pid = fork();
if(pid>0)//父进程运行的部分
{
FILE* fp = fopen("1.txt","r+");
if(fp==NULL)
{
perror("open");
exit(1);
}
char buf[32];
memset(buf,0,32);
printf("请输入内容:\n");
while(1)
{
char* res=fgets(buf,32,stdin);
if(res==NULL){break;}
fputs(buf, fp);
}fclose(fp);
}
else if(pid==0)//子进程运行的部分
{
sleep(10); // 等待父进程写入数据,实际应用中可能需要更复杂的同步机制
FILE *fp1 = fopen("1.txt", "r");
if (fp1 == NULL)
{
perror("fopen");
exit(1);
}
char buffer[1024]={0};
while (fgets(buffer, sizeof(buffer), fp1) != NULL)
{
printf("Child read: %s", buffer);
}
fclose(fp1);
}
return 0;
}
2:编写2个进程 进程1:负责使用execl 替换成 shell指令 find /usr -name include 进程2:负责使用execv 替换成 shell指令 find /usr -name include
#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, char const *argv[])
{
pid_t pid=fork();
if(pid==0)
{
printf("child process\n");
execl("find","find","/usr","-name","include",(char*)NULL);
sleep(1);
exit(0);
}
else if(pid>0)
{
printf("parent process\n");
char* arg[4]={"/usr","-name","include",(char*)NULL};
execv("find",arg);
}
return 0;
}