一、作业
1:创建一对父子进程 父进程负责:打开文件,向文件中写入键盘键入的数据 子进程负责:打开相同的文件,从文件中读取刚才键入的数据 (注意:想办法保证先写入数据,后读取数据)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.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 = fork();//创建进程,生成父子进程
if(pid > 0) //父进程--->打开文件
{
//创建并打开文件(给予权限)
FILE *fp = fopen("wst.txt", "w+");
//输入--->向文件写入输入的数据
char stu[120]={0};
fgets(stu,60,stdin);
fputs(stu,fp);
fclose(fp);
}
else if(pid == 0) //子进程
{
sleep(5);
FILE * fp1 = fopen("wst.txt","r");
while(1) //阻塞
{
if(fp1 == NULL)//以只读形式形式打开文件
{
perror("fopen");
return 0;
}
char buf[150]={0};
//读取文件中的数据,并输出
char * res = fgets(buf,10,fp1);
printf("%s\n",buf);
if(res == NULL){break;}
}
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 <stdlib.h>
#include <unistd.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 = fork();
if(pid > 0)
{
execl("./demo","demo",NULL);
}
else if(pid == 0)
{
char *arg[2]={"demo",NULL};
execv("./demo",arg);
}
return 0;
}