리눅스 c언어 질문입니다

spring7s의 이미지

문제와 결과는 다음과 같습니다.

<문제> 부모 프로세스는 두 변수 n과 m을 통해 자식 프로세스가 더할 범위를 지정한다. n에는 10, m에는 100을 저장한다. 이들을 전역 변수로 선언하든 지역 변수로 선언하든 상관없다. 그리고 fork()를 이용하여 자식 프로세스를 생성한다. 자식 프로세스는 부모 프로세스를 그대로 복사하므로 부모에 선언된 변수 n과 m을 그대로 물려받는다. 자식 프로세스는 변수n에서 변수 m까지 합을 구하고 합이 5000보다 작으면 0을, 5000이면 1을, 5000보다 크면 2를 종료 코드로 리턴한다. 부모 프로세스는 wait() 함수를 호출하여 자식 프로세스가 종료하기를 기다린 후, 자식 프로세스의 종료코드를 읽어 n에서 m까지의 합이 5000보다 큰 것이었는지 판별한다.

<결과>

자식 프로세스: 10에서 100까지의 합은 5005
부모 프로세스: 5000보다 크다.

여기서 저는 합 결과를 종료 코드로 리턴하는 것부터 코딩이 막혔습니다. 일단 10부터 100까지의 합이 5005이기 때문에 5000보다 크면 2를 종료 코드로 리턴하라고 해서 시도는 해봤습니다만 결과가 원하는 대로 나오지 않습니다. 혹시 이를 해결한 코드를 알 수 있을까 싶습니다.

제가 지금까지 작성한 코드는 다음과 같습니다. 틀린 부분이 많은 것 같은데, 아직 리눅스를 시작한지 얼마 안 되어서 헷갈리는 것들이 한 두 개가 아닙니다...

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
 
int main() {
    pid_t pid;
    int status;
    int n = 10;
    int m = 100;
    int sum = 0;
 
    pid = fork(); // 자식 프로세스 생성
    if (pid < 0)
    {
        printf("fork 오류");
        return 0;
    }
 
    if (pid == 0) // 자식 프로세스 코드
    {
        for (; n <= m; n++)
            sum = sum + n; // n부터 m까지 합 계산
        printf("자식 프로세스: 10에서 100까지의 합은 %d\n", sum); // n부터 m까지 합 결과 출력
        exit(2);
    }
    else // 부모 프로세스 코드
    {
        wait(&status);
        printf("부모 프로세스: 5000보다 크다.\n");
    }
}
Lipi의 이미지

리눅스 머신 명령 창(혹은 WSL: Windows Subsystem for Linux)에서
man pipe
해 보면 pipe함수에 대한 설명과 샘플코드가 있으니 돌려보시고 코드 이해가 되면 충분히 원하는 코드를 작성할 수 있을 것입니다.

추가로 exit 함수가 부모 프로세스에게 값을 전달해 주지는 않습니다.
man exit
으로 확인해 보세요.

익명 사용자의 이미지

WSL을 사용해본적이 없어서요. 저는 CoCalc에 있는 리눅스 터미널을 이용합니다. 혹시 pipe를 다루는데 코드 작성이 많이 다른가요???

spring7s의 이미지

위에 댓글 쓴건 접니다. 로그아웃상태로 답글을 써버렸네요...

Lipi의 이미지

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.