जवाबों:
touch
utimes
फ़ाइल के संशोधन समय और उसके एक्सेस समय को सेट करने के लिए सिस्टम कॉल को कॉल करता है। कुछ सिस्टम पर, इसके बजाय utimes
, यह फाइल को खोलता है और फिर फाइल को डिस्क्रिप्टर के माध्यम से सेट करता है, जैसे utimensat
लिनक्स के तहत।
आप touch
अपने द्वारा किए गए सिस्टम कॉल को देखकर अपने सिस्टम पर कैसे काम कर सकते हैं, यह देख सकते हैं । लिनक्स के तहत, स्ट्रेस का उपयोग करें , उदा strace touch -d '1 hour ago' foo
।
स्रोत कोड कहां से प्राप्त करें यह आपके ऑपरेटिंग सिस्टम पर निर्भर करता है। जीएनयू संस्करण कोर्यूटिल्स में है , किसी भी बीएसडी के मुख्य स्रोत के पेड़ में एक संस्करण है , मिनिक्सिक्स आदि में बिजीबॉक्स में एक संस्करण है ।
कभी-कभी आपको सोर्स कोड की भी आवश्यकता नहीं होती है। का उपयोग करें strace
।
$ strace touch -t 201212121212 foobar
execve("/usr/bin/touch", ["touch", "-t", "201212121212", "foobar"], [/* 61 vars */]) = 0
[...] lots of noise [...]
open("foobar", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
dup2(3, 0) = 0
close(3) = 0
utimensat(0, NULL, {{1355310720, 0}, {1355310720, 0}}, 0) = 0
close(0) = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
क्यों नमस्ते वहाँ, utimensat()
। आप क्या हैं?
$ man utimensat
NAME
utimensat, futimens - change file timestamps with nanosecond precision
तो एक फ़ंक्शन है जो फ़ाइल टाइमस्टैम्प को बदलता है, और touch
एक फ़ाइल के टाइमस्टैम्प को अपडेट करने के लिए इसका उपयोग करता है। और यही वह आंतरिक रूप से काम करता है।
यहां बताया गया है कि यह सोलारिस पर कैसे काम करता है। truss
इसके बजाय इसका उपयोग किया जाता है, strace
जो यहां एक अलग कमांड है।
जैसे Gnu / Linux के अंतर्गत, utimensat
सिस्टम कॉल का उपयोग किया जाता है।
$ truss -vall -u a.out -f touch -t 1306080000 z
4160: execve("/usr/bin/touch", 0xF0770FC0, 0xF0770FD4) argc = 4
...
4160/1@1: -> main(0x4, 0xf0770fc0, 0xf0770fd4, 0xf0770f7c)
...
4160/1@1: -> atoi_for2(0xf0771131, 0x0, 0x24, 0xebc95be0)
4160/1@1: <- atoi_for2() = 13
4160/1@1: -> atoi_for2(0xf0771133, 0x0, 0x24, 0xebc95be0)
4160/1@1: <- atoi_for2() = 6
4160/1@1: -> atoi_for2(0xf0771135, 0x0, 0x24, 0xebc95be0)
4160/1@1: <- atoi_for2() = 8
4160/1@1: -> atoi_for2(0xf0771137, 0x0, 0x24, 0xebc95be0)
4160/1@1: <- atoi_for2() = 0
4160/1@1: -> atoi_for2(0xf0771139, 0x0, 0x24, 0xebc95be0)
4160/1@1: <- atoi_for2() = 0
4160/1@1: <- parse_time() = 0x51b257e0
4160/1: stat64("z", 0xF0770ED0) = 0
4160/1: d=0x08A00002 i=75783706 m=0100644 l=1 u=100 g=10 sz=0
4160/1: at = Jun 8 01:48:08 CEST 2013 [ 1370648888.022270973 ]
4160/1: mt = Jun 8 01:48:08 CEST 2013 [ 1370648888.022270973 ]
4160/1: ct = Jun 8 01:48:08 CEST 2013 [ 1370648888.022273810 ]
4160/1: bsz=4096 blks=0 fs=tmpfs
4160/1: utimensat(AT_FDCWD, "z", 0xF0770F60, 0) = 0
4160/1: at = Jun 8 00:00:00 CEST 2013 [ 1370642400.000000000 ]
4160/1: mt = Jun 8 00:00:00 CEST 2013 [ 1370642400.000000000 ]
4160/1@1: <- main() = 0
4160/1@1: -> _fini()
4160/1@1: <- _fini() = 0xebcc0140
4160/1: _exit(0)