먼저이 질문은 this stack overflow question과 관련이 있습니다. 그러나 상황이 약간 달라졌고 내 게시물에 응답이 없습니다.리눅스 소켓 파일 사용 권한을 변경하십시오
내 Dell 데스크탑 워크 스테이션 인 Ubuntu 10.04 32 비트에서 Apache가 실행하는 PHP "프로그램"에 Unix-Domain 소켓을 제공하도록 설계된 서버 프로그램을 개발했습니다. (참고 : umask = 0022) 소켓 파일/home/wmiller/ACT/web_socket_file의 이름을 지정했습니다. (ACT는 제품 이름에 대한 참조입니다)./home/wmiller/ACT는 777의 권한을 가지고 있습니다./home/wmiller/ACT/web_socket_file은 권한 777로 생성됩니다.
이제 테스트 플랫폼 인 Q7 포맷의 Intel 프로세서 보드에 프로그램을 복사합니다. Ubuntu 10.04 32 비트 및 umask = 0022가 있습니다. 동일한 디렉토리, dir에 대한 동일한 777 권한. 그러나 이제는/home/wmiller/ACT/web_socket_file 코드를 실행하면 755 개의 사용 권한이 생기고 Apache/PHP는 rw 또는 rwx 대신 r-x 권한을 얻기 때문에 Unix 도메인 소켓을 열 수 없습니다. Apache는 uid = www-data에서 실행됩니다.
sockaddr_un webServAddr;
remove(g_webSocketFileName.c_str()); // to erase any lingering file from last time
memset(&webServAddr, 0, sizeof(webServAddr));
webServAddr.sun_family = AF_UNIX;
snprintf(webServAddr.sun_path, UNIX_PATH_MAX, "%s", g_webSocketFileName.c_str());
if ((g_webServerSock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
{
PLOG(ERROR) << "Failed to acquire the web Server socket: "; // uses google glog tool
return -1;
}
그래서 두 가지 모두 시도해 보았습니다. 777의 입출력 + w의
chmod(g_webSocketFileName.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
및
char temp[100];
sprintf(temp , "chmod o+w %s\n", g_webSocketFileName.c_str());
system(temp);
시도 권한.
는 난 거기
unlink(g_webSocketFileName.c_str());
그러나 어떤 도움을 추가했습니다.
ir는 왜 하나의 컴퓨터에서 작동하고 다른 거의 동일한 컴퓨터에서는 작동하지 않는지에 대한 제안이 있습니까? 소켓 파일을 다른 곳에 두는 것이 나을 것입니까? 표준 장소가 어디 있습니까? 소켓 파일은 어디에 있습니까?
알았습니다! 내가해야 할 일을했을 모든 바인드 후() 문은 chmod()를 이동했고 그것을 작동합니다! –