mozilla code -nspr 文件I/O - 2

4 篇文章 0 订阅
4 篇文章 0 订阅
文件I/O
#include <prio.h> 

结构体:

PRFileDesc 这个结构体太深奥了.再研究

struct PRFileDesc {
    const PRIOMethods *methods;         /* the I/O methods table */ //好像是函数指指的列表,也就是访问的函数的列表
    PRFilePrivate *secret;              /* layer dependent data */ //在PR_Open中好像调用了CreateFile,最后在prio.c中fd->secret->md.osfd = osfd这里就是返回的HANDLE
    PRFileDesc *lower, *higher;         /* pointers to adjacent layers */ //不清楚
    void (PR_CALLBACK *dtor)(PRFileDesc *fd);   /* A destructor function for layer */ //不清楚
    PRDescIdentity identity;            /* Identity of this particular layer  */ //特殊的layer的标志
};
typedef struct PRFileDesc PRFileDesc;


1.PR_Open
//打开or创建一个文件来读OR写OR读写,如果文件成功打开返回PRFileDesc *否则返回NULL;

//成功返回后,在使用完后要用PR_Close.关闭PRFileDesc*

/* Open flags */
#define PR_RDONLY       0x01 //只读打开,与PR_CREATE_FILE一起用时,如果没有文件则可以创建文件
#define PR_WRONLY       0x02 //只写打开,与PR_CREATE_FILE一起用时,如果没有文件则可以创建文件
#define PR_RDWR         0x04 //可读可写打开,与PR_CREATE_FILE一起用时,如果没有文件则可以创建文件
#define PR_CREATE_FILE  0x08 //如果不存在则创建,如果存在没有意义.与其它一起用,如果没有此flags时其它flags会返回NULL
#define PR_APPEND       0x10 //追加打开,打开时指针在最后,与PR_CREATE_FILE一起用时,如果没有文件则可以创建文件
#define PR_TRUNCATE     0x20 //覆盖打开,如果存在文件清零,
#define PR_SYNC         0x40 //写同步
#define PR_EXCL         0x80 //与PR_CREATE_FILE一起用,如果不存在在,则创建,存在则函数返回NULL

/*
** File modes ....
**只针对Unix-like系统 -rwxrwxrwx
**当设置了PR_CREATE_FILE,设定相对应的属性
#define PR_IRWXU 00700  /* read, write, execute/search by owner */
#define PR_IRUSR 00400  /* read permission, owner */
#define PR_IWUSR 00200  /* write permission, owner */
#define PR_IXUSR 00100  /* execute/search permission, owner */
#define PR_IRWXG 00070  /* read, write, execute/search by group */
#define PR_IRGRP 00040  /* read permission, group */
#define PR_IWGRP 00020  /* write permission, group */
#define PR_IXGRP 00010  /* execute/search permission, group */
#define PR_IRWXO 00007  /* read, write, execute/search by others */
#define PR_IROTH 00004  /* read permission, others */
#define PR_IWOTH 00002  /* write permission, others */
#define PR_IXOTH 00001  /* execute/search permission, others */
*/

NSPR_API(PRFileDesc*) PR_Open(const char *name, PRIntn flags, PRIntn mode);

NSPR_API(PRFileDesc*) PR_OpenFile( const char *name, PRIntn flags, PRIntn mode);

2.PR_Close
//关闭打开的PRFileDesc *fd (文件或Socket,)
NSPR_API(PRStatus)    PR_Close(PRFileDesc *fd);


3.PR_Delete

//删除指定的文件,成功返回PR_SUCCESS,否则返回PR_FAILURE.

NSPR_API(PRStatus) PR_Delete(const char *name);

4.PR_GetFileInfo 和 PR_GetFileInfo64

见此处


5.PR_Rename

/*
 **************************************************************************
 * FUNCTION: PR_Rename
 * DESCRIPTION:
 *     Rename a file from the old name 'from' to the new name 'to'.
 * INPUTS:
 *     const char *from
 *         The old name of the file to be renamed.
 *     const char *to
 *         The new name of the file.
 * OUTPUTS:
 *     None.
 * RETURN: PRStatus
 **************************************************************************
 */
//重命名一个文件or文件夹(重命名文件夹不一定成功,好像不能移动),成功返回PR_SUCCESS,出错返回PR_FAILURE

//应有出错处理,
NSPR_API(PRStatus)    PR_Rename(const char *from, const char *to);

6. PR_Access

/*
 *************************************************************************
 * FUNCTION: PR_Access
 * DESCRIPTION:
 *     Determine accessibility of a file.
 * INPUTS:
 *     const char *name
 *         path name of the file
 *     PRAccessHow how
 *         specifies which access permission to check for.
 *         It can be one of the following values:
 *             PR_ACCESS_READ_OK       Test for read permission
 *             PR_ACCESS_WRITE_OK      Test for write permission
 *             PR_ACCESS_EXISTS        Check existence of file
 * OUTPUTS:
 *     None.
 * RETURN: PRStatus
 *     PR_SUCCESS is returned if the requested access is permitted.
 *     Otherwise, PR_FAILURE is returned. Additional information
 *     regarding the reason for the failure may be retrieved from
 *     PR_GetError().
 *************************************************************************
 */

typedef enum PRAccessHow {
    PR_ACCESS_EXISTS = 1,
    PR_ACCESS_WRITE_OK = 2,
    PR_ACCESS_READ_OK = 3
} PRAccessHow;

NSPR_API(PRStatus) PR_Access(const char *name, PRAccessHow how);


//例程(vc2008)

#include "nspr.h"

#include <iostream>

#pragma comment(lib,"nspr4.lib")
#pragma comment(lib,"plc4.lib")

using namespace std;
int main(int argc, char* argv[])
{
    
    PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
    PRErrorCode err_code;
    PRFileDesc* fd;
    if (! (fd = PR_Open("c:\\demo.txt", PR_CREATE_FILE| PR_EXCL, 0)))
    {
        err_code = PR_GetError();
        PR_Cleanup();
        return 0;
    }
    PR_Close(fd);
    PR_Rename("c:\\demo.txt", "c:\\demo_rename.txt");
    PR_MkDir("c:\\dir", 0);//没有写出错处理
    if (PR_SUCCESS == PR_Access("c:\\dir",PR_ACCESS_EXISTS))
    {    
        if (PR_FAILURE == PR_Rename("c:\\dir", "c:\\dir_rename"))
        {
            err_code = PR_GetError();
        }
    }

    PR_Sleep(5000);
    PR_Delete("c:\\demo_rename.txt");
    PR_RmDir("c:\\dir_rename");
    PR_Cleanup();
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
NSPR(Netscape Portable Runtime)是一套跨平台的系统级函数库,与操作系统无关,可以在多个操作系统上运行。因此可以使用NSPR来实现维纳滤波。 维纳滤波是一种最优滤波方法,可以通过对原始信号和噪声的统计特性进行分析,从而得到最优滤波器的频率响应。 以下是一个使用NSPR实现维纳滤波的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <nspr/nspr.h> #define N 1000 #define M 100 double x[N], y[N], h[M], v[M], mu, sig; void init() { int i, j; PRUint32 seed = (PRUint32)PR_Now(); for (i = 0; i < N; i++) { x[i] = (double)PR_Random(&seed) / PR_UINT32_MAX; y[i] = 0.0; } for (i = 0; i < M; i++) { h[i] = (double)PR_Random(&seed) / PR_UINT32_MAX; v[i] = 0.0; } mu = 0.0; for (i = 0; i < N; i++) { mu += x[i]; } mu /= N; sig = 0.0; for (i = 0; i < N; i++) { sig += (x[i] - mu) * (x[i] - mu); } sig /= N; } void filter() { int i, j; for (i = 0; i < M; i++) { v[i] = h[M - i - 1]; } for (i = M; i < N; i++) { y[i] = 0.0; for (j = 0; j < M; j++) { y[i] += h[j] * x[i - j]; } } for (i = 0; i < M; i++) { h[i] = 0.0; for (j = 0; j < N - i; j++) { h[i] += x[j] * y[j + i]; } h[i] /= (N - i); h[i] -= mu * v[i] / sig; } } int main(int argc, char* argv[]) { init(); filter(); return 0; } ``` 在这个示例代码中,我们首先使用NSPR生成了一个长度为1000的随机信号x,长度为100的随机滤波器h,并计算了x的均值mu和方差sig。然后使用滤波器h对信号x进行滤波,得到输出信号y,并根据y和x的自相关函数计算出最优滤波器h。最后输出最优滤波器h的值。 需要注意的是,在实际应用中,信号和滤波器的长度可能会非常大,因此在计算时需要使用高效的算法和数据结构来优化计算速度和内存占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值