无法通过 system() 从程序中设置 "echo"文件

标签 c linux system

我尝试使用 system("echo 1 >/sys/class/afile") 将文件设置为 1。

如果我在控制台上使用它,它运行良好,但如果我运行我的 C 程序,它会显示:

sh: echo: I/O error

我已经尝试用下面的代码设置它:

char i[1];
i[0]=1;
int fd1 = open("/sys/class/afile",O_CREAT | O_WRONLY);
int ret = write(fd1,i,strlen(i));
if(ret > 0)
   printf("Ok\n");
else
   printf("nOk\n");
close(fd1);

结果是“Ok”但是文件没有改变。

最佳答案

strlen(i) 产生未定义的行为,因为 i 不是字符串;该阵列缺少空终止空间。此外,i[0]=1; 不会在数组中放入一个'1' 字符,而是放入一个值为 1 的字节,这是一个“^A 字符”。

改为尝试 write(fd, "1", 1) - 不需要任何变量或 strlen

关于无法通过 system() 从程序中设置 "echo"文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57302669/

相关文章:

c - 为什么 exec() 函数族不执行 exec() 之后的代码?

c++ - 在 C++ 中查看 system() 调用的输出

c++ - 将 C 编译为 C++ 链接器错误(lua 和 oolua)

c - 一个文件中可以有单独的 "namespace"吗?

java - 什么样的应用程序使用 getopt "return in order"行为?

linux - 我如何在 anaconda python 中导入 OpenGL?

php - 如何在 PHP 中获取系统信息?

iphone - 线程 1 : Program received signal: "EXC_BAD_ACCESS"

C 编程 : Debugging with pthreads

ELF 执行期间的 Linux 内存/磁盘行为