솔라리스에서 make 안되는 문제점

thenopen의 이미지

안녕하세요.
그냥저냥 밥 벌어먹고 사는 개발자 입니다.
갑자기 문제가 발생하여 이렇게 가입하고 바로 글 올립니다.. ㅠㅠ
제가 리눅스 버전을 솔라리스로 컨버팅해야 하는데 문제가 발생하는군요.
CentOS 에서 문제없이 돌던 놈이 갑자기 솔라리스에서 mkdir 이 안되는 문제가 발생했습니다.
(Cent에서도 인지하지 않아서 그렇지 문제가 있었을수도 있습니다.)
mkdir(dir, 0755)를 사용해서 시도 중인데 저희가 만든 함수, mkdir()도, sudo로 root 계정으로 억지로 system() 넣어도 서버 응답 없음이 발생하고 있습니다.
찾아본 결과 저희가 fork를 사용하는데 solaris fork와 pthread fork의 차이점 때문인것 같다는 짐작만 있을뿐 아무것도 얻은게 없네요.

shared memory를 생성하고 fork로 자식 프로세스 생성해서 통신하고 있습니다.

아무 의견이라도 좋으니 고수님들의 고견 부탁드리겠습니다.
그리고 글 읽어 주셔서 감사합니다.

thenopen의 이미지

죄송합니다. 제가 정신이 없어서
솔라리스에서 mkdir이 안되는 문제 입니다.

희망을 나눠요~

희망을 나눠요~

ymir의 이미지

mkdir() 의 리턴값과 errno 를 체크해 보셨나요?

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

thenopen의 이미지

뭐 제가 허접해서 그런지 모르겠으나 확인할수가 없습니다.
if(mkdir(dir, 0755)!= 0){
error_exit("%s %d %s", dir, errno, strerror(errno));
}
사용 했었드랬습니다.
앞에서 말씀드렸다시피 이 함수는 타지도 않더군요.
희망을 나눠요~

희망을 나눠요~

ymir의 이미지

mkdir() 이 실행되지 않는다는 말에는 많은 가능성이 존재합니다..
좀 더 구체적인 상황 설명이 필요하군요.

dir 값과, dir 의 상위 디렉토리 상태..
(dir 이 /a/b/c 일 경우 반드시 /a/b 라는 디렉토리가 존재해야 합니다. 아니면 fail.. )

mkdir 이 실행되었는지의 여부..
실패했는데, error_exit 가 아무런 값도 표시하지 않았다면..
error_exit 가 값을 표시하도록 되어 있는지, 아니면 아무짓도 안 하게 되어 있는지..
mkdir() 이후의 루틴이 실행되었는지..
(이후 루틴이 실행 되었다면, mkdir 은 일단 호출되었고.. success 를 리턴했군요..)

mkdir() 이 실행되지 않았다면, 정상/비정상 종료 여부..
core 가 생성되었는지도 확인 필요할거구요..

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

poss의 이미지

#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
 
int main(int argc, char ** argv)
{
    if (argc != 2)
    {
        fprintf(stderr, "Usage : mkdir dirname\n");
        return 1;
    }
 
    if(mkdir(argv[1], 0755))
    {
        perror("mkdir error");
        return 1;
    }
 
    return 0;
}

위와같이 작성한 후에 solaris 에서 gcc 및 cc 로 컴파일 했더니 잘 작동합니다.
thenopen의 이미지

그 함수로는 들어가는군요.

mkdir 생성한 직후 프로세스가 바로 죽어버려서 서버와 접속이 끊기는 현상이 나타납니다.
즉, mkdir /test/test1 이라는 디렉토리를 생성하게 되면 mkdir /test 에서 프로세스가 죽어버리고 이후 다시 mkdir /test/test1 이라는 디렉토리를 생성할수 없다는 문제입니다. 다시말해 폴더 안에 폴더가 존재하게 되면 그 폴더를 만들어놓고 프로세스가 죽는다는 말입니다.

설명이 어려웠다면 죄송합니다.

희망을 나눠요~

희망을 나눠요~

ymir의 이미지

target directory 가 존재하는 경우에도 error 를 리턴할 겁니다.
mkdir() 이 -1 을 리턴하고, errno 가 EEXIST 일 경우에는 성공으로 간주하거나..
mkdir 호출 전에 target directory 가 존재하는지 확인해서,
존재한다면 그 디렉토리를 삭제하고 나서 mkdir 을 호출하거나,
mkdir 을 건너뛰는 루틴을 추가하면 될 것 같네요..

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

thenopen의 이미지

이런 제가 로그를 똑바로 보지 않고 문제를 키웠던 셈이군요.
ymir 님에게 감사의 말씀을 전합니다.
뜻대로 잘 해결 되었습니다.

희망을 나눠요~

희망을 나눠요~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.