Я не собираюсь лгать, я полностью потерян.Я должен написать код для создания общей памяти вместе с ответвлением от строки cmd указанного числа дочерних процессов с exec.У меня есть две программы "master" и "oss", где я беру исполняемый файл "./oss" с вызовом exec.Я работаю над этим в течение двух недель, и это все, что у меня есть, поэтому я прихожу сюда в качестве крайней меры в поисках помощи / объяснений, потому что мне явно не повезло в Интернете или от моего профессора.
Раньше меня высмеивали на этой платформе за то, что я задавал простые вопросы, но как человек, который не очень знаком с системным программированием, я хотел бы просто изучить и получить представление о его теме.
"магистерская" программа:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHSIZE 100
int main( int argc, char *argv[]) {
pid_t pid;
pid = fork();
int shmid, shmMsg;
key_t key;
char *shm;
key = 9876;
shmid = shmget(key, SHSIZE, 0666);
if(shmid < 0) {
perror("shmget");
exit(1);
}
shm = shmat(shmid, NULL, 0);
if(shm == -1) {
perror("shmat");
exit(1);
}
shmMsg = shmat(shmid, NULL, 0);
if(shmMsg == -1) {
perror("shmat");
exit(1);
}
char *args[] = {"./oss", "-h", "-l", "-s", "-t", (char *) 0};
if(pid < 0){
printf("**Fork Error**\n");
exit(1);
}
else if(pid == 0){
int ex = execv("./oss", args);
if(ex == -1)
printf("*Error*");
exit(1);
}
printf("CLOCK");
wait(2);
shmdt(shm);
shmdt(shmMsg);
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
Программа 'oss':
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHSIZE 100
int main(int argc, char *argv[]) {
int shmid, shmMsg, c, n;
int getopt(int argc, char const **argv, const char *options);
key_t key;
char *shm;
pid_t pid;
key = 9876;
/* Send shared memory of 'size' to server */
shmid = shmget(key, SHSIZE, IPC_CREAT | 0666);
if(shmid < 0){
perror("shmget");
exit(1);
}
/* Attach Server to shared memory */
shm = shmat(shmid, NULL, 0);
if(shm == -1){
perror("shmat");
exit(1);
}
shmMsg = shmat(shmid, NULL, 0);
if(shmMsg == -1){
perror("shmat");
exit(1);
}
/* fill clock into shared memory */
int clk = 0;
while((c = getopt(argc, argv, ":hlst")) != 1)
{
switch(c)
{
case 'h':
break;
case 'l':
case 's':
case 't':
break;
}
}
wait(2);
shmdt(shm);
shmdt(shmMsg);
shmctl(shmid, IPC_RMID, NULL);
return 0;
}