我不会撒谎,我完全迷失了。我必须编写代码来创建共享内存,并用exec分叉指定数量的子进程的cmd行。我有两个程序“ master”和“ oss”,在这里我通过exec调用获取可执行文件“ ./oss”。我已经进行了两个星期的工作,这就是我所拥有的,所以我来这里是最后的寻求帮助/解释的方法,因为我显然没有互联网或我的教授的运气。
在问这个简单的问题之前,我曾在这个平台上被嘲笑过,但是作为一个对系统编程不太熟悉的人,我希望简单地学习并了解他的主题。
“主”程序:
#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;
}