首页 > 解决方案 > 无法通过系统()从程序中设置带有“回声”的文件

问题描述

我正在尝试使用 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);

结果是“好的”,但文件没有改变。

标签: clinuxsystem

解决方案


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

而是尝试write(fd, "1", 1)- 不需要任何变量或strlen.


推荐阅读