Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Android上的settimeofday()会导致错误-只读文件系统_C_Linux_Time_Android Ndk - Fatal编程技术网

C Android上的settimeofday()会导致错误-只读文件系统

C Android上的settimeofday()会导致错误-只读文件系统,c,linux,time,android-ndk,C,Linux,Time,Android Ndk,我正在尝试用C语言的NDK本机代码设置设备时间。据我所知,最好的解决方案是使用settimeofday() 导致 settimeofday() failed: Read-only file system 在native中是否有其他方法来设置时间?有可能吗?我看了只读文件系统部分的问题,但我没有根设备 提前谢谢 如果没有足够的权限,您无法设置设备时间,应用程序将无法在非根设备上获得该权限。从手册页: EPERM The calling process has insufficient p

我正在尝试用C语言的NDK本机代码设置设备时间。据我所知,最好的解决方案是使用settimeofday()

导致

settimeofday() failed: Read-only file system
在native中是否有其他方法来设置时间?有可能吗?我看了只读文件系统部分的问题,但我没有根设备


提前谢谢

如果没有足够的权限,您无法设置设备时间,应用程序将无法在非根设备上获得该权限。从手册页:

   EPERM  The calling process has insufficient privilege to call  settime-
          ofday(); under Linux the CAP_SYS_TIME capability is required.
即使您成功地设置了它,下次设备通过网络获得时间更新时,它也可能被覆盖


有点奇怪,你得到的是EROFS而不是EPERM。

Android系统时钟映射到“/dev/alarm”,它只对非系统应用程序具有读取权限。所以,如果你想改变一个股票设备的时间,那你就倒霉了。你必须使用其中一种-

  • 设置应用程序(使用系统特权运行的系统应用程序)或
  • 使用系统特权对应用程序进行签名(除非您为供应商工作或推出自己的FW,否则这是不可能的)
  • 因此,如果只想使用应用程序更改系统时间,则必须将“/dev/alarm”的权限更改为可写权限(来自adb shell的chmod 666/dev/alarm)。要做到这一点,您需要一个根设备

    更改权限后,您将能够使用应用程序(SystemClock.setCurrentTimeMillis())中的Java API更改时间

    我仍然无法使用settimeofday()或clock_settime()使其工作


    希望这能有所帮助。

    因此,只有在使用Java API的应用程序上下文中才能设置时间:)?
       EPERM  The calling process has insufficient privilege to call  settime-
              ofday(); under Linux the CAP_SYS_TIME capability is required.