c中写入/sys或/proc文件系统的正确方法
在c语言中,linux中写入/proc或/sys文件系统的正确方法是什么 我可以像在任何其他文件中那样写吗,或者我需要注意哪些特殊的考虑因素 例如,我想模拟echo-nmem>/sys/power/state。下面的代码是正确的方法吗c中写入/sys或/proc文件系统的正确方法,c,procfs,sysfs,write,C,Procfs,Sysfs,Write,在c语言中,linux中写入/proc或/sys文件系统的正确方法是什么 我可以像在任何其他文件中那样写吗,或者我需要注意哪些特殊的考虑因素 例如,我想模拟echo-nmem>/sys/power/state。下面的代码是正确的方法吗 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { FILE *f; f = fopen("/sys/power/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
FILE *f;
f = fopen("/sys/power/state", "w");
if(f == NULL) {
printf("Error opening file: /sys/power/state\n");
exit(1);
}
fprintf(f,"%s","mem");
fclose(f);
}
您的方法在写入操作中缺少一些错误处理 fprintf或fwrite或您喜欢使用的任何东西可能会失败,例如,如果sysfs文件后面的内核驱动程序不喜欢您正在编写的内容。例如:
echo 17 > /sys/class/gpio/export
-bash: echo: write error: Invalid argument
为了捕获这些错误,您必须检查fprintf的输出,以查看您希望写入的所有字符是否都已写入,并且还应该检查ferror的输出。例如,如果您正在写入mem,fprintf应返回3,并且流中不应设置任何错误
但还缺少一件事:sysf不是标准文件。要正确返回上一个写入错误,必须禁用流中的缓冲,否则fprintf或fwrite可能会顺利结束,而不会出现任何错误。您可以在fopen之后使用setvbuf这样做
您的方法在写入操作中缺少一些错误处理 fprintf或fwrite或您喜欢使用的任何东西可能会失败,例如,如果sysfs文件后面的内核驱动程序不喜欢您正在编写的内容。例如:
echo 17 > /sys/class/gpio/export
-bash: echo: write error: Invalid argument
为了捕获这些错误,您必须检查fprintf的输出,以查看您希望写入的所有字符是否都已写入,并且还应该检查ferror的输出。例如,如果您正在写入mem,fprintf应返回3,并且流中不应设置任何错误
但还缺少一件事:sysf不是标准文件。要正确返回上一个写入错误,必须禁用流中的缓冲,否则fprintf或fwrite可能会顺利结束,而不会出现任何错误。您可以在fopen之后使用setvbuf这样做
我觉得你的代码很好。你试过了吗?echo不知道它正在向sys写入,为什么你的程序要这样做?@n.'代词“m”-就echo而言,它认为它是在向终端书写。重定向由shell处理。我不知道shell是否有一些针对/sys的特殊处理。毕竟,sys和proc的行为在很多方面都是不同的,它写入标准输出。Shell对/proc或/sys也一无所知,/proc/和/sys中的文件都是有充分理由的文件。原因是能够使用处理文件的现有工具访问它们。如果它们需要特殊处理,通过类似文件但不完全是接口的方式使它们可用是完全没有意义的。你试过了吗?echo不知道它正在向sys写入,为什么你的程序要这样做?@n.'代词“m”-就echo而言,它认为它是在向终端书写。重定向由shell处理。我不知道shell是否有一些针对/sys的特殊处理。毕竟,sys和proc的行为在很多方面都是不同的,它写入标准输出。Shell对/proc或/sys也一无所知,/proc/和/sys中的文件都是有充分理由的文件。原因是能够使用处理文件的现有工具访问它们。如果它们需要特殊处理,那么通过类似文件但不完全是接口的方式使它们可用是完全没有意义的。