Ứng dụng của tôi cần tạo một ổ cắm toàn hệ thống (độc lập với số lượng người dùng trên máy Mac). Tôi đang sử dụng * .plist cho đến cuối này:
<key>Sockets</key>
<dict>
<key>Listener</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer><!-- 0666 -->
<key>SockPathName</key>
<string>/var/tmp/myApp.socket</string>
</dict>
</dict>
Gần đây tôi đã có một báo cáo lỗi khá khó khăn để gỡ lỗi, và cuối cùng có vẻ như lỗi đó là do người dùng không có /var/tmp
thư mục. Vì vậy, câu hỏi của tôi là:
- Tôi có thể làm gì để nhận được thông báo lỗi có ý nghĩa hơn khi không thể tạo Ổ cắm?
- Tôi có thể làm gì để có được thư mục được tạo nếu nó không tồn tại?
- là
/var/tmp
nơi thích hợp cho các ổ cắm như vậy? Tôi có nên đi/tmp
thay thế? Hoặc một số thư mục khác?
CHỈNH SỬA
FWIW, tôi chỉ nhận thấy rằng /var/run
dường như có khá nhiều ổ cắm, một số đủ quan trọng để tôi có thể xem xét Mac sẽ không thể sử dụng được nếu thư mục bị thiếu.
$ ls -l /var/run
total 88
-rw------- 1 root daemon 0 19 jan 15:24 automount.initialized
drwxr-xr-x 3 _assetcache _assetcache 96 19 jan 15:26 com.apple.AssetCache
---------- 1 root daemon 0 19 jan 15:24 com.apple.WindowServer.didRunThisBoot
-rw------- 1 root daemon 4 22 jan 11:14 com.apple.dt.instruments.servicehub_63755_505.pid
-r-------- 1 root daemon 0 19 jan 15:24 com.apple.loginwindow.didRunThisBoot
-r-------- 1 root daemon 0 19 jan 15:24 com.apple.mdmclient.daemon.didRunThisBoot
-rw------- 1 root daemon 0 20 jan 12:16 com.apple.parentalcontrols.webfilterctl.mutex
-rw-r--r-- 1 root daemon 0 20 jan 11:48 com.apple.softwareupdate.availableupdatesupdated
drwxr-xr-x 3 root daemon 96 19 jan 15:29 com.apple.xpc.smd
srwxrwxrwx 1 root daemon 0 19 jan 15:24 cupsd
-rw-r--r-- 1 root daemon 3 19 jan 15:24 diskarbitrationd.pid
drwxr-xr-x 3 _displaypolicyd _displaypolicyd 96 19 jan 15:24 displaypolicyd
lrwxr-xr-x 1 root daemon 57 22 jan 11:44 docker.sock -> /Users/akim/Library/Containers/com.docker.docker/Data/s60
-rw-r--r-- 1 root daemon 16 19 jan 15:24 fudinit
-rw-r--r-- 1 root daemon 6 21 jan 13:20 hdiejectd.pid
-rw-r--r-- 1 root daemon 3 19 jan 15:24 kdc.pid
srw-rw-rw- 1 root daemon 0 19 jan 15:24 mDNSResponder
drwx------ 3 root daemon 96 21 jan 13:21 mds
-rw-r--r-- 1 root daemon 3 19 jan 15:24 mds.pid
srwxrwxrwx 1 root daemon 0 19 jan 15:24 portmap.socket
srwxrwxrwx 1 root daemon 0 19 jan 15:24 pppconfd
drwxr-xr-x 4 root daemon 128 19 jan 15:24 racoon
-rw-r--r-- 1 root daemon 4 19 jan 15:24 racoon.pid
-rw-r--r-- 1 root daemon 379 22 jan 13:30 resolv.conf
srw-rw-rw- 1 root daemon 0 19 jan 15:24 syslog
-rw-r--r--@ 1 root daemon 3 19 jan 15:24 syslog.pid
-r--r--r-- 1 root daemon 0 19 jan 15:24 systemkeychaincheck.done
srw-rw-rw- 1 root daemon 0 19 jan 15:24 systemkeychaincheck.socket
srwxrwxrwx 1 root daemon 0 19 jan 15:24 usbmuxd
-rw-r--r--@ 1 root daemon 5652 22 jan 11:44 utmpx
srw------- 1 root daemon 0 19 jan 15:24 vpncontrol.sock
-rw-r--r-- 1 root wheel 0 19 jan 15:24 wifi
Chào! Không, tôi đã không nhìn vào các dịch vụ XPC, tôi sẽ. Bởi "trong lịch sử đã" có nghĩa là trước đây
—
akim
/var/tmp
và bây giờ /var/run
là? Tôi dường như không có đủ danh tiếng để chuyển câu hỏi, bạn có gợi ý tôi nên mở một câu hỏi mới trên SO không?
Bạn nên hỏi lại trên StackOverflow - bạn sẽ thu hút câu trả lời tốt hơn từ các nhà phát triển. Trang web này tập trung vào người dùng. Tôi nói trong lịch sử bởi vì Apple đã loại bỏ mã mẫu sử dụng các ổ cắm tên miền có lợi cho việc triển khai dựa trên XPC.
—
Graham Miln
/var/tmp
phù hợp với quy trình của bên thứ ba.
/var/tmp
được sở hữu bởi root
vì vậy một cài đặt mà không có vẻ như là một trường hợp bên lề.
Lặp đi lặp lại trên SO: stackoverflow.com/questions/48387834/macos-sockets-in-plist .
—
akim
/var/tmp/
trong lịch sử đã được Apple đề xuất vị trí cho ổ cắm tên miền trên macOS. Bạn đã điều tra các dịch vụ XPC? Chúng thường được các kỹ sư của Apple khuyên dùng để liên lạc giữa các quá trình.