토큰링구현인데요 답변좀...
system programming인데요 링을 구현한거에요
연습문제인데요 잘 모르겟어서 적어봅니다. 어떤 방법으로 해야할지 모르겠네요 ㅡㅡ;
많은 조언 부탁해요~
1. wait함수를 호출하기 전에 각 프로세스는 링의 모든 프로그세스에 해당하는 ID를 가지도록 nprocs 배열을 할당한다.
자신의 프로세서 ID를 배열의 0번에 넣고 next_ID변수를 자신의 ID로 설정한다.
2. 1에서 nprocs-1까지 k를 사용하여 다음을 수행하여라
a. next_ID를 표준 출력으로 출력하여라
b. 표준입력으로부터 next_ID를 읽어라
c.ID 배열의 k번째 자리에 next_ID를 삽입하여라.
3. wait 함수뒤의 fprintf함수를 표준 에러에 읽기 가능한 한 줄짜리 형태로 ID배열의 내용을 출력하는 루프로 교체하라.
ID 배열은 주어진 프로세스에 대해 상향(정보받는 방향) 프로세스의 순으로 출력되기 때문에, 출력된 결과를 이용하여 링의
연결 상태를 검사할 수 있다.
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
pid_t childpid;
pid_t next_ID;
pid_t *arrayID;
int error;
int fd[2];
int i;
int k;
int nprocs;
if((argc != 2) || ((nprocs = atoi(argv[1])) <= 0))
{
fprintf(stderr, "usage : %s nprocs\n", argv[0]);
return 1;
}
if(pipe(fd) == -1)
{
perror("Failed to create starting pip");
return 1;
}
if((dup2(fd[0], STDIN_FILENO) == -1) || (dup2(fd[1], STDOUT_FILENO) == -1))
{
perror("Failed to connect pipe");
return 1;
}
if((close(fd[0]) == 1) || (close(fd[1]) == -1))
{
perror("Failed to close extra descriptors");
return 1;
}
for(i = 1; i < nprocs; i++)
{
if(pipe(fd) == -1)
{
fprintf(stderr, "[%ld] : filaled to create pipe %d: %s\n", (long)getpid(), i, strerror(errno));
return 1;
}
if((childpid = fork()) == -1)
{
fprintf(stderr, "[%ld] : failed to create child %d: %s\n", (long)getpid, i, strerror(errno));
return 1;
}
if(childpid > 0)
error = dup2(fd[1], STDIN_FILENO);
else
error = dup2(fd[0], STDOUT_FILENO);
if(error == -1)
{
fprintf(stderr, "[%ld] : failed to dup pipes for iteration %d: %s\n", (long)getpid, i, strerror(errno));
return 1;
}
if((close(fd[0]) == -1) || (close(fd[1]) == -1))
{
fprintf(stderr, "[%ld] : failed to close extra descriptors %d: %s\n", (long)getpid, i, strerror(errno));
return 1;
}
if(childpid)
break;
}
wait(NULL);
fprintf(stderr, "This is process %d with ID %ld and parent id %ld\n", i, (long)getpid(), (long)getppid());
return 0;
}

