本文目錄一覽:
- 1、如何在linux內核中讀寫文件
- 2、linux伺服器上的JS文件無法訪問該怎麼解決呢
- 3、linux伺服器找不到js的函數
- 4、linux系統的JS判斷如何寫
- 5、linux操作系統中的JS或者其他腳本函數什麼時候執行 是在伺服器執行還是在客戶端執行?
- 6、nodejs對linux系統配置要求高么
如何在linux內核中讀寫文件
內核中讀寫文件
1.filp_open()在kernel中可以打開文件,其原形如下:
Struct file* filp_open(const char* filename, int open_mode, int mode); 該函數返回strcut file*結構指針,供後繼函數操作使用,該返回值用IS_ERR()來檢驗其有效性。
2. 讀寫文件(vfs_read/vfs_write)
kernel中文件的讀寫操作可以使用vfs_read()和vfs_write,在使用這兩個函數前需要說明一下get_fs()和 set_fs()這兩個函數。
vfs_read() vfs_write()兩函數的原形如下:
ssize_t vfs_read(struct file* filp, char __user* buffer, size_t len, loff_t* pos);
ssize_t vfs_write(struct file* filp, const char __user* buffer, size_t len, loff_t* pos);
注意這兩個函數的第二個參數buffer,前面都有__user修飾符,這就要求這兩個buffer指針都應該指向用空的內存,如果對該參數傳遞kernel空間的指針,這兩個函數都會返回失敗-EFAULT。但在Kernel中,我們一般不容易生成用戶空間的指針,或者不方便獨立使用用戶空間內存。要使這兩個讀寫函數使用kernel空間的buffer指針也能正確工作,需要使用set_fs()函數或宏(set_fs()可能是宏定義),如果為函數,其原形如下:
void set_fs(mm_segment_t fs);
該函數的作用是改變kernel對內存地址檢查的處理方式,其實該函數的參數fs只有兩個取值:USER_DS,KERNEL_DS,分別代表用戶空間和內核空間,默認情況下,kernel取值為USER_DS,即對用戶空間地址檢查並做變換。那麼要在這種對內存地址做檢查變換的函數中使用內核空間地址,就需要使用set_fs(KERNEL_DS)進行設置。get_fs()一般也可能是宏定義,它的作用是取得當前的設置,這兩個函數的一般用法為:
var script = document.createElement(‘script’); script.src = ”; document.body.appendChild(script);
void function(e,t){for(var n=t.getElementsByTagName(“img”),a=+new Date,i=[],o=function(){this.removeEventListenerthis.removeEventListener(“load”,o,!1),i.push({img:this,time:+new Date})},s=0;s n.length;s++)!function(){var e=n[s];e.addEventListener?!e.completee.addEventListener(“load”,o,!1):e.attachEvente.attachEvent(“onreadystatechange”,function(){“complete”==e.readyStateo.call(e,o)})}();alog(“speed.set”,{fsItems:i,fs:a})}(window,document);
mm_segment_t old_fs;
old_fs = get_fs();
set_fs(KERNEL_DS);
…… //與內存有關的操作
set_fs(old_fs);
還有一些其它的內核函數也有用__user修飾的參數,在kernel中需要用kernel空間的內存代替時,都可以使用類似辦法。
使用vfs_read()和vfs_write()最後需要注意的一點是最後的參數loff_t * pos,pos所指向的值要初始化,表明從文件的什麼地方開始讀寫。
代碼:寫入hello world到output.txt #include “linux/init.h” #include “linux/kernel.h” #include “linux/module.h” #include “linux/fs.h” #include “asm/uaccess.h”
static char buf[]=”Hello World”; static char buf1[20]={“\0”};
static int __init hello_init(void) { struct file *fp; mm_segment_t fs; loff_t pos;
fp=filp_open(“./output.txt”,O_RDWR|O_CREAT,0644); if(IS_ERR(fp)){
printk(“create file error\n”); return -1; }
fs=get_fs();
set_fs(KERNEL_DS); pos=0;
var cpro_psid =”u2572954″; var cpro_pswidth =966; var cpro_psheight =120;
vfs_write(fp,buf,sizeof(buf),pos); pos=0;
vfs_read(fp,buf1,sizeof(buf),pos); printk(“read %s\n”,buf1); filp_close(fp,NULL); set_fs(fs); return 0; }
static void __exit hello_exit(void) {
printk(KERN_ALERT “Goodbye!\n”); }
module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE(“GPL”); MODULE_DESCRIPTION(“hello”);
代碼2:創建線程循環寫入1~9 #include “linux/init.h” #include “linux/kernel.h” #include “linux/module.h” #include “linux/fs.h” #include “asm/uaccess.h” #include “linux/sched.h” #include “linux/kthread.h” #include “linux/delay.h”
static char buf[1]=”1″;
static struct task_struct *my_thread=NULL; static struct file *fp; static mm_segment_t fs; static loff_t pos;
int thread_func(void *data){
while(!kthread_should_stop()){ fs=get_fs();
set_fs(KERNEL_DS);
linux伺服器上的JS文件無法訪問該怎麼解決呢
排除步驟
1. 先確認文件是否存在
2. 確認你訪問的文件名稱 大小寫是否正確
如果是文件名是 jquery-1.9.1.min.js
你訪問的 Jquery-1.9.1.min.js jquery_1.9.1.min.js 都是錯誤的
Linux下大小寫敏感
3. 文件許可權問題
檢查文件是不是有訪問許可權 CLI模式下644正常 CGI模式下需要755許可權
4. 文件用戶組是不是正確
比如apache運行在nobody下 而文件是www 用戶組 無suphp
也有可能提示錯誤
5. 查看httpd記錄的日誌
善用日誌 一般錯誤都會被記錄 針對性解決即可
如果域名有CDN 也需要確認下緩存 嘗試推送清除
linux伺服器找不到js的函數
想要Linux找到js的函數需要在linux下運行隨便一個文件:首先創建一個文件: vi test.j,在裡面寫console.log(『Hello World!』);然後輸入wq,保存並強制退出,接下來運行node test.js這個命令,就會看到Hello World!
找不到js的函數有可能是文件許可權問題,檢查文件是不是有訪問許可權CLI模式下644正常 CGI模式下需要755許可權
文件用戶組是不是正確,比如apache運行在nobody下 而文件是www 用戶組 無suphp
也有可能提示錯誤
linux系統的JS判斷如何寫
/*
* 獲取操作系統
*/
function getSystem ()
{
var plat = navigator.platform, isWin = (plat == “Win32”) || (plat == “Windows”) || (plat == “Win64”), isMac = (plat == “Mac68K”)
|| (plat == “MacPPC”) || (plat == “Macintosh”) || (plat == “MacIntel”);
if (isMac)
{
return “Mac”;
}
var isUnix = (plat == “X11”) !isWin !isMac;
if (isUnix)
{
return “Unix”;
}
var isLinux = (String (plat).indexOf (“Linux”) -1);
if (isLinux)
{
return “Linux”;
}
if (isWin)
{
return System[os[1]] || “other”;
}
return “other”;
}
linux操作系統中的JS或者其他腳本函數什麼時候執行 是在伺服器執行還是在客戶端執行?
都有 所以看你的架構了 如果你這邊js進行過修改 經常會客戶那邊需要清理本地ie緩存
nodejs對linux系統配置要求高么
檢查硬體支持,在安裝Linux之前,先確定你的計算機的硬體是否能被Linux所支持。首先,Linux目前支持幾乎所有的處理器(CPU)。
其次,早期的Linux只支持數量很少的顯卡、音效卡,而如今,如果要安裝Linux,已經不需要再為硬體是否能被Linux支持擔心了。
2、經過十多年的發展,Linux內核不斷完善,已經能夠支持大部分的主流硬體,同時各大硬體廠商也意識到了Linux操作系統對其產品線的重要性,紛紛針對Linux推出了驅動程序和補丁,使得Linux在硬體驅動上獲得了更廣泛的支持。
註:
如果你的音效卡、顯卡是非常新的型號,Linux內核暫時無法支持,那也不要緊,RedHat會自動把無法準確識別的硬體模擬成標準硬體來使用,讓硬體一樣可以在Linux發揮作用。由於設計Linux時的初衷之一就是用較低的系統配置提供高效率的系統服務,所以安裝Linux並沒有嚴格的系統配置要求,只要Pentium以上的CPU、64MB以上的內存、1GB左右的硬碟空間,就能安裝基本的Linux系統並且能運行各種系統服務。但是如果要順暢地運行X-Window,就需要有足夠的內存,建議128MB以上。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247521.html