su -c를 통해 파일 설명자를 전달합니다.

su -c를 통해 파일 설명자를 전달합니다.

C 프로그램 A에서 열린 파일 설명자가 주어지면 프로그램 B를 U2로 열고 fd싶습니다 . fd내 시스템(wsl2 ubuntu) execl("/usr/bin/su", "su", suarg1, "U2");(여기서 suarg1은 "-c B " + toHex(fd)임)이 작동하는 것 같고 첫 번째 인수를 구문 분석하여 B의 파일 설명자에 액세스할 수 있습니다. 그러나 파일 설명자를 열어 두는 것에 대한 문서에서는 아무 것도 찾을 수 없으며 언제든지 변경될 수 있는 동작에 의존하고 싶지 않습니다. 그렇다면 영원히 작동할 이유가 있나요? 또는 이것이 구현에 따라 달라지는 경우 문서화된 작업 방식으로 유사한 것을 어떻게 달성할 수 있습니까?

편집: 내가 충분히 명확하지 않은 것 같습니다. Exec 문서에서는 파일 설명자를 열어둔다고 언급하지만 su 문서에서는 비슷한 내용을 찾을 수 없습니다. 그래서 나는 그것을 끄지 않을 것이라고 믿을 수 있는지 확신하지 못합니다. 시도해 보았는데 효과가 있었지만 다음 중 하나를 원합니다.

  • 어떠한 상황에서도 모든 Linux에서 실행되는지 확인합니다.
  • fdA에서 B로 이동하는 또 다른 방법작업 기록

그냥 fd열어두는 게 낫겠지만, 신뢰성이 더 중요합니다.

답변1

이것은 부작용입니다 execl(). 현재 프로세스 이미지를 새 프로세스 이미지로 대체합니다. 현재 열려 있는 파일을 닫지 않으며 대체 파일이 해당 파일을 상속합니다. 이는 주로 새 프로세스가 stdin/stdout/stderr에 액세스할 수 있도록 수행되지만 다른 파일을 대체 프로세스에 전달하는 것을 막을 수는 없습니다.

관련 정보